正则表达式问题:为什么这不匹配?

时间:2010-05-17 18:27:18

标签: regex c#-4.0

我有以下正则表达式:(?<=\.\d+?)0+(?=\D|$)我正在针对包含以下内容的字符串运行它:SVC~NU^0270~313.3~329.18~~10~~6.00:

当它运行时,它匹配6.00(正确),我的逻辑然后修剪一个零,变成6.0。然后正则表达式再次运行(或应该运行),但无法获取6.0。

我绝不是Regex的专家,但我对我的表达的理解是,它正在寻找一个或多个可选(因此,实际为零或更多)数字之前的一个或多个零的数字,然后是后跟任何非数字字符或换行符。假设解释是正确的,我不明白为什么它在第二遍时不匹配。就此而言,我不确定为什么我的Regex.Replace在第一遍中没有匹配完整的6.00并删除了两个尾随的零...

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

+?表示“匹配一个或多个,非贪婪”。你可能认为它与*意思相同,即匹配零次或多次。因此,前面的表达式\d必须匹配至少一次才能使整个表达式匹配,输入6.0不再是这种情况。

+?更改为*,表达式应该有效。

答案 1 :(得分:0)

试试这个:

(?<=\.\d+?)0*?(?=\D|$)