我花了半个小时试图得到这个,也许有人可以快速拿出来.
我需要一个匹配一个或两个数字的正则表达式,后跟一个可选的decmial点,后跟一个或两个数字.
例如,它应该完整匹配这些字符串:
3
33
.3
.33
33.3
33.33
并且不匹配在decmial点之前或之后超过2位数的任何内容.
Lee*_*Lee 59
编辑:更改为适合其他反馈.
我理解你的意思是,如果没有小数点,那么不应该有两个以上的数字.所以这应该是:
\d{0,2}(\.\d{1,2})?
Run Code Online (Sandbox Code Playgroud)
在大多数实现中,这应该成功.如果没有,您可以使用:
[0-9]?[0-9]?(\.[0-9][0-9]?)?
Run Code Online (Sandbox Code Playgroud)
这应该适用于我见过的每一个实现.
(?<![\d.])(\d{1,2}|\d{0,2}\.\d{1,2})?(?![\d.])
Run Code Online (Sandbox Code Playgroud)
火柴:
不匹配:
为了建立 Lee 的答案,您需要锚定表达式以满足小数点前不超过 2 个数字的要求。
如果每个数字都是一个单独的字符串,则可以使用字符串锚点:
^\d{0,2}(\.\d{1,2})?$
Run Code Online (Sandbox Code Playgroud)
如果每个数字都在一个字符串中,则可以使用单词 anchors:
\b\d{0,2}(\.\d{1,2})?\b
Run Code Online (Sandbox Code Playgroud)
您提到您希望正则表达式匹配每个字符串,但您之前提到过小数点前有 1-2 位数字?
这将匹配 1-2 位数字,后跟一个可能的小数,后跟另外 1-2 位数字,但在 0.33 的示例中失败
\d{1,2}\.?\d{1,2}
Run Code Online (Sandbox Code Playgroud)
这将匹配 0-2 位数字,后跟可能的 deciaml,后跟另外 1-2 位数字,并匹配 0.33 的示例
\d{0,2}\.?\d{1,2}
Run Code Online (Sandbox Code Playgroud)
不确定您到底要找哪一个。