首页 > 解决方案 > 需要正则表达式 - 没有美分的美元

问题描述

我正在尝试创建一个匹配美元符号后的数字但之后没有美分的正则表达式。

33.92 美元 - 不匹配

211 美元 - 匹配 211

这就是我到目前为止所拥有的。

(?<=\$)\d+(?!\.)

看着这串……

东西 $122.30 $45 $1.111

...它正确匹配“45”,但也匹配“12”。

我明白为什么它是错误的,但我不知道如何解决它。

谢谢

标签: regex

解决方案


您可以使用

(?<=\$)\d+(?![.\d])

请参阅正则表达式演示

显示使用所有格量词和原子分组的同义表达式:

(?<=\$)\d++(?!\.)
(?<=\$)(?>\d+)(?!\.)

那些不支持后视的环境的表达式应该在\d+模式周围有一个捕获组:

\$(\d+)(?![.\d])
  ^   ^

那么所需的值在第 1 组中。

仅供参考:\$([0-9]+)($|[^.0-9])甚至可以使用 POSIX ERE。

细节

  • (?<=\$)-$必须立即出现在当前位置的左侧
  • \d+- 1+ 位数
  • (?![.\d])- 当前位置的右侧不应立即出现点或数字。

正则表达式图:

在此处输入图像描述


推荐阅读