根据MSDN,"$&"
替换字符序列返回整个匹配的副本。我无法理解为什么在替换字符串中输入字符串上"(\$*(\d*(\.+\d+)?){1})"
带有替换字符串的模式中有一个尾随. 结果字符串是"**$&"
"$1.30"
"**"
"**$1.30**"
编辑:也许,稍后再回来会给我答案(就像大多数正则表达式问题一样:P),但我想今晚睡觉!
考虑 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)()