如何编写匹配具有以下属性的字符串的正则表达式?:
- 包含数字以及作为小数分隔符的唯一点(但点不是必需的,这意味着它可以是
123
或123.4
或123.56
). - 没有前导点(不是
.12
)。 - 前导零只能在后面跟一个点时写入(不能像
000.12
,只能是0.12
)。 - 只有 2 位小数。
最佳答案
在小数点左边你想要一个不以零开头的数字(1 位或更多位):
[1-9][0-9]*
或者它可以只是一个零:
0|[1-9][0-9]*
数值可以有小数点和小数点后1-2位:
\.[0-9]{1,2}
左侧为必填项。小数点和小数位是可选的:
(?:0|[1-9][0-9]*)(?:\.[0-9]{1,2})?
需要第一个非捕获组来限制 |
模式的范围。需要第二个非捕获组来使组合的“小数点和小数位”模式可选。
请注意,这将允许尾随零,例如100.00
根据喜好,[0-9]
也可以写成\d
。我通常使用 \d
,但由于正则表达式也有 [1-9]
,所以我更喜欢这里的 [0-9]
我觉得这有助于澄清差异。
根据正则表达式的使用方式,您可能需要添加 ^
begin/$
end anchor 。在使用 find()
时需要它们,在使用 matches()
时不需要它们,但不会造成伤害:
^(?:0|[1-9][0-9]*)(?:\.[0-9]{1,2})?$
关于java - 正则表达式没有前导点和最大一个前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51196783/