我刚遇到一个正则表达式模式及其匹配的模式字符串,但我对其中一个匹配的模式感到困惑
Target: .50 1.50 0.50 10.50 00.50 1.555
Pattern: (0|[1-9]\d*)\.\d\d
Matches with: (4,7:1.50)(9,12:0.50)(14,18:10.50)(21,24:0.50)(26,29:1.55)
我从模式中推断出的是十进制后的两位数,在十进制之前是一个第一个数字为0或1到9之间的任何数字的组,后跟空字符串或任何数字字符串......
我认为在最后一场比赛中它应该是00.50。
我错过了什么?
答案 0 :(得分:2)
只需将正则表达式模式更改为
即可(00?|[1-9]\d*)\.\d\d
如果要在小数点前允许一个或两个零。你当前正则表达式只捕获其中一部分的原因是因为|
表示在.
之前捕获一个零或捕获任何不以零开头的长度(因为类{ {1}}排除它。)
答案 1 :(得分:1)
(0|[1-9]\d*)\.\d\d
^^
你的模式是匹配0 or any digit from 1 to 9 and then as many
。所以结果是正确的,因为你没有提供锚点或单词边界来禁止部分匹配。使用
\b(0|[1-9]\d*)\.\d\d\b
只做适当的比赛。
答案 2 :(得分:1)
我认为在最后一场比赛中它应该是00.50。
我错过了什么?
不,您的正则表达式(0|[1-9]\d*)\.
的这一部分可以重写为(0\.|[1-9]\d*\.)
,因此它只能接受
0
和.
OR
[1-9]\d*
和.
如果您希望在使用点之前允许它使用多个零
(0+|[1-9]\d*)\.\d\d
^--one or more zeroes