gpt4 book ai didi

c# - 为什么输入字符串 "**$&"上的替换模式 "$1.30"会返回一个之前为 "**"而输入字符串为 "after"的字符串?

转载 作者:太空宇宙 更新时间:2023-11-03 10:59:37 26 4
gpt4 key购买 nike

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

编辑:也许,稍后再回到这个问题会给我答案(大多数正则表达式问题都是这样 :P),但我今晚想 sleep !

最佳答案

考虑 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)()

关于c# - 为什么输入字符串 "**$&"上的替换模式 "$1.30"会返回一个之前为 "**"而输入字符串为 "after"的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18201472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com