【发布时间】:2022-01-04 14:45:03
【问题描述】:
下面是一个匹配数字的模式。它几乎可以工作。第二行应该和99匹配但是没有匹配?为什么?
(?<!\d[- ]|[\d.,])\(?-?(?:(?:[1-9]\d{0,2}(?:(?:[. ]\d{3})*|\d*))|0)(?:\b|[,]\d{1,3})-?\)?(?![\d.,\/]|-[\d\/])
100,00stk => 100,00
99stk => 99 \\ this is not matched
10,45stk => 10,45
【问题讨论】:
-
这是由于
(?:\b|,\d{1,3})中的单词边界,请参阅regex101.com/r/nwRCKo/2,如果删除它会得到匹配。但是,该模式过于模糊,即使在此修复之后也可能无法正常工作。 -
@WiktorStribiżew 在我删除 `\b|´ 后它仍然不起作用
-
确实如此 - regex101.com/r/nwRCKo/2
-
@WiktorStribiżew 创建一个答案 :)
-
好的,但我相信
(?![\d.,\/]|-[\d\/])并不适合您。至少在删除\b之后,它会在很多情况下停止工作。模式应该是固定的,但我对它没有要求。