gpt4 book ai didi

正则表达式匹配取决于后向匹配

转载 作者:行者123 更新时间:2023-12-02 05:17:21 24 4
gpt4 key购买 nike

我需要匹配这些值:

(粗略地实现我想要的正则表达式的第一种方法)

\d+([.,]\d{3})*[.,]\d{2}

喜欢

24,56
24.56
1.234,56
1,234.56
1234,56
1234.56

但我需要匹配

1.234.56
1,234,56

因此,我需要检查最后一次出现的“.”或“,”是否与之前的“.”相同>”或“,”。

背景:金额应采用英语和德语格式,并使用(可选)1000 分隔符。

但即使在 regex101 的帮助下,我也完全无法想出一个正确工作的后视。任何建议都将受到高度赞赏。

更新

根据我迄今为止得到的答案,我想出了这个( demo ):

\d{1,3}(?:([\.,'])?\d{3})*(?!\1)[\.,\s]\d{2}

但它匹配例如1234.567,23,这是不可取的。

最佳答案

您可以捕获数字分组符号并使用带有反向引用的负前瞻来限制小数分隔符:

^(?:\d+|\d{1,3}(?:([.,])\d{3})*)(?!\1)[.,]\d{2}$
^ ^ ^^^^^

请参阅regex demo

组 1 将包含数字分组符号的最后一个值和 (?!\1)[.,]将匹配其他符号。

详细信息:

  • ^ - 字符串开头
  • (?:\d+|\d{1,3}(?:([.,])\d{3})*) - 两种选择之一:
    • \d+ - 1+ 位数字
    • | - 或
    • \d{1,3} - 1 到 3 位数字,
    • (?:([.,])\d{3})* - 零个或多个序列:
      • ([.,]) - 第 1 组捕获 .,
      • \d{3} - 3 位数字
  • (?!\1)[.,] - 一个.,但不等于最后使用 ([.,]) 捕获的内容上面的图案
  • \d{2} - 2 位数字
  • $ - 字符串结尾。

关于正则表达式匹配取决于后向匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43114031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com