我有以下简单的负面看法
(?<![Ø]\s*)
以下表达式匹配整数或小数,无论是否包含整数部分
([0-9]*(?:[.,][0-9]+)?)
第二个表达式匹配8 8.8 8,8 .8 ,88 etc..
我试图将两个表达式结合起来忽略第二个表达式的整个匹配,以防它前面有Ø
,所以我做了
(?<![Ø]\s*)([0-9]*(?:[.,][0-9]+)?)
和那些测试值
88.88
88,88
,88
.5
Ø .8
Ø 8.8
前4个值按预期匹配,但最后2个的一部分得到部分匹配,我预计它根本不匹配,有人可以告诉我缺少什么吗?
答案 0 :(得分:4)
你可以试试这个
(?<![Ø]\s*|[.,\d])(?=[\d.,]{1,})([0-9]*(?:[.,][0-9]+)?)
^^
||
<强> regexstorm demo 强>
建议的更简单的版本(?<!Ø\s*|[.,\d])(\d*[.,]?\d+)
答案 1 :(得分:4)
总是更好地解释SO的答案。所以我们走了:问题是表达式实际上可以匹配字符串中的。因此,如果测试用例在匹配中有多个字符可能会失败,那么匹配将启动一个字符并匹配其余字符。更加如此,因为给定的表达式可以匹配某些字符空白字符串。做事的最佳方式是:
这两个都可以用负面的背后隐藏来完成。因此:(?<!Ø\s*[.,\d]*)\d*[.,]?\d+