我有以下正则表达式:(?<=\.\d+?)0+(?=\D|$)
我正在针对包含以下内容的字符串运行它:SVC~NU^0270~313.3~329.18~~10~~6.00:
当它运行时,它匹配6.00(正确),我的逻辑然后修剪一个零,变成6.0。然后正则表达式再次运行(或应该运行),但无法获取6.0。
我绝不是Regex的专家,但我对我的表达的理解是,它正在寻找一个或多个可选(因此,实际为零或更多)数字之前的一个或多个零的数字,然后是后跟任何非数字字符或换行符。假设解释是正确的,我不明白为什么它在第二遍时不匹配。就此而言,我不确定为什么我的Regex.Replace
在第一遍中没有匹配完整的6.00并删除了两个尾随的零...
有什么建议吗?
答案 0 :(得分:2)
+?
表示“匹配一个或多个,非贪婪”。你可能认为它与*
意思相同,即匹配零次或多次。因此,前面的表达式\d
必须匹配至少一次才能使整个表达式匹配,输入6.0
不再是这种情况。
将+?
更改为*
,表达式应该有效。
答案 1 :(得分:0)
试试这个:
(?<=\.\d+?)0*?(?=\D|$)