我们都对这个感到难过:
[^a-zA-Z]
在" 1082.006":
上运行此代码请注意缺少" 6"
经过一些盲目的猜测,我们删除了{{1}}并得到了正确的答案。我们最初添加了这个,以便我们拒绝任何数字,其他字符直接附加没有空格。
例如:应该拒绝10.05D。
任何人都可以解释为什么这个额外的部分导致我们失去了最后一次" 6"?
答案 0 :(得分:1)
[^a-zA-Z]
是一个字符类。字符类匹配一个字符。它不匹配字符串的结尾,因为那里没有字符。
要获得该结果,引擎会将所有数字与\\d+
匹配,包括最后一个。然后需要回溯以便最后一个字符类得到满足。
我认为您希望允许零宽度匹配(特别是当它是字符串的结尾时)。在您的情况下,最简单的方法是使用:
(-)?(\\d+)\\.(\\d+)([^a-zA-Z]|$)
或者,如果Qt支持非捕获组:
(-)?(\\d+)\\.(\\d+)(?:[^a-zA-Z]|$)
请注意,我还建议使用[.]
代替\\.
,因为我觉得它提高了可读性。