2

根据MSDN"$&"替换字符序列返回整个匹配的副本。我无法理解为什么在替换字符串中输入字符串上"(\$*(\d*(\.+\d+)?){1})"带有替换字符串的模式中有一个尾随. 结果字符串是"**$&""$1.30""**""**$1.30**"

编辑:也许,稍后再回来会给我答案(就像大多数正则表达式问题一样:P),但我想今晚睡觉!

4

1 回答 1

2

考虑 MSDN 文章建议的代码:

Regex.Replace("$1.30", @"(\$*(\d*(\.+\d+)?){1})", "**$0") // **$1.30**

现在仔细看看图案。从技术上讲,空字符串与模式匹配,例如:

Regex.Replace("", @"(\$*(\d*(\.+\d+)?){1})", "**$0") // **

因此,出现在第一个匹配项 ( $1.30) 之后的零长度子字符串也与该模式匹配。因此,在原始情况下进行了两种替换,一种结果为**$1.30,另一种结果为**. 如果您尝试替换模式,则可以确认这一点($&)

Regex.Replace("$1.30", @"(\$*(\d*(\.+\d+)?){1})", "($&)") // ($1.30)()
于 2013-08-13T05:50:59.683 回答