我需要一个匹配数字零的十进制形式的正则表达式,如0或0.0或0.00000但不是10的倍数,如110.0000
我已经看到了this这样的问题而且它并不匹配。
我一直在使用优秀的在线正则表达式工具here来测试模式,但我的成功有限。
我能想到的最好的是enctype
很遗憾,正则表达式将(\b0+(\.)?0+\b)
视为字边界,因此它最终会捕获.
中的.000
。删除我的25.000
修复了该问题,但随后错过了任何孤立的单?
个字符
答案 0 :(得分:2)
(?<![\d.])0+(?:\.0+)?(?![\d.])
前面没有数字或小数点;那么任意数量的零,可选地后跟一个小数点和任意数量的零;并且没有数字或小数点。
然而,这不适用于没有后瞻性的引擎,例如JavaScript。
答案 1 :(得分:1)
答案 2 :(得分:0)
(?:^|[ ])0+(?:\.0+)?(?:[ ]|$)
如果您需要检索零的确切文本,只需将其包裹在parens中即可将其匹配。将您想要的任何其他字符添加到大括号或替换为\s
或[:[space]:]
等类(或者用您的语言表示)
答案 3 :(得分:0)
这种模式很难看出来:
(?:^|[^.\d])(0?\.0+|0)(?:[^.\d]|$)
(?:^|[^.\d])
非匹配组的任何不是数字也不是句号但可以作为一行的开头
(0?\.0+|0)
匹配组以匹配浮点数或整数零
(?:[^.\d]|$)
非匹配组的任何不是数字也不是句号但可以是一行的结尾
应该处理明显的情况,即使是在一条线上。应该在上下文中处理零,例如“0.0in”或坐标“(34.8,0.0)”当前拧紧“0”。
答案 4 :(得分:0)
也许这会有所帮助:
在您指向的正则表达式工具网站上,此表达式为:
((!(\d+0\.0*))|(\d*[^0]\.0*)|([^\d]0\.0)|([^\d]0\.)|(^0))
说明:
!(\d+0\.0*) => does not match digits ends with 0 following by a dot and zeros
(\d*[^0]\.0*) => match digits that not have a zero before the dot, following by zeros
([^\d]0\.0) => match 0.0 that having no digits before the first zero
([^\d]0\.) => match 0. that having no digits before the first zero
(^0) => math a zero on the starts of the line
结果:
0 <- match
0.0 <- match
25.00000 <- match
10.00000 <- does not match
110.0000 <- does not match
2818.0000 <- match
120901821.000 <- match
0. <- match