正则表达式匹配一个数字后跟一个点(".")

man*_*noj 9 java regex eclipse

我有一个字符串

字符串1(不包括引号) - >"我的车号是#8746253,实际上很酷"

条件 - 数字8746253,可以是任意长度
- 数字也可以紧跟一个行尾.

我想分组8746253,后面不应该跟一个点"."
我试过了,

*#(\ d +)[^.].*

这肯定会得到我的数字,但即使有一个点也会匹配,因为[.^]将匹配数字的最后一位(例如,在下面的情况下为3)

字符串2(不包括引号) - >"地球是#8746253.Kms,这是非常远的"

我想只匹配字符串1类型而不匹配字符串2类型.

Wik*_*żew 5

要匹配任何数字后面#没有点,请使用

(?<=#)\d++(?!\.)
Run Code Online (Sandbox Code Playgroud)

++是一个占有量词,它将使正则表达式引擎仅(?!\.)在最后一个匹配的数字之后检查前瞻,并且如果之后有一个点则不会回溯.因此,如果在数字块中的最后一个数字后面有一个dit,则整个匹配将失败.

请参阅正则表达式演示

要匹配整行并将数字放入捕获组#1:

.*#(\d++)(?!\.).*
Run Code Online (Sandbox Code Playgroud)

看到这个正则表达式演示.或者没有前瞻的版本:

^.*#(\d++)(?:[^.\r\n].*)?$
Run Code Online (Sandbox Code Playgroud)

另一个演示.在最后一个版本中,数字块只能跟随一个不是a ,CR和LF 的可选序列,.后跟除了换行符((?:[^.\r\n].*)?)之后的任何0+字符,然后是字符串($)的结尾.

  • @YCF_L:`++`是一个**占有**量词,一旦数字后面有一个点,就会停止正则表达式引擎重试匹配`\ d +`模式.当匹配`123`和`\ d +(?!\.)`时,`3`将失败,但正则表达式引擎知道它仍然可以重试`\ d +`模式以找到一个未结束的数字序列用`.`,它找到`12`(因为`3`不是`.`).当使用`++`时,禁止正则表达式引擎以这种方式*回溯*. (2认同)