具有固定总位数的小数的正则表达式

时间:2015-05-06 10:06:06

标签: regex perl

有没有办法编写匹配

等字符串的正则表达式
(0|[1-9][0-9]*)\.[0-9]+

但具有指定数量的数字字符。例如:对于3个数字字符,它应匹配“0.12”,“12.3”但不匹配“1.234”或“1.2”。我知道我可以写出像

这样的东西
(?<![0-9])(([0-9]{1}\.[0-9]{2})|([1-9][0-9]{1})\.[0-9]{1})(?![0-9])

但是对于大量数字而言,这变得相当繁琐。

(我知道我不需要{1},但它更好地解释了我在做什么)

2 个答案:

答案 0 :(得分:0)

^(?=[\d.]{4}$)\d+\.\d+$

你可以尝试3位数。可以扩展更多。参见演示。

https://regex101.com/r/bN8dL3/4

 \b(?=[\d.]{4}\b)\d+\.\d+\b

如果你不想要anchors

答案 1 :(得分:0)

您可以将它们与添加替代项匹配:

\b(?:[0-9]\.[0-9]{2}|[1-9][0-9]\.[0-9])\b

然后,您不需要任何开始/结束字符串/行锚点。

请参阅demo