我遇到的问题是我使用regex.Replace来替换部分字符串。基本思想是我想捕获字符串的开头,然后用代码中的值替换字符串的结尾。举个例子假装我有一个字符串,上面写着“Test Number”后跟数字,我想增加这个数字。我捕获“测试编号”,但是当我尝试将捕获与新编号连接时,它将捕获($ 1)视为文字,并用$ 1 [新编号]替换整个字符串。
Dim s as String = "We are on Test Number 1"
Dim newNumber as Integer = 2
s=Regex.Replace(s,"(Test Number )(\d)","$1" & newNumber)
这将输出“我们12美元”。但是,如果我在替换中使用文字,则问题不会发生。
Dim s as String = "We are on Test Number 1"
s=Regex.Replace(s,"(Test Number )(\d)","$1" & "2")
这将按预期输出“我们在测试编号2上”。
在包含捕获的组时,有没有人对如何在Regex.Replace的替换字符串部分中使用变量有任何想法?
提前致谢。
答案 0 :(得分:2)
我刚才有同样的问题。要解决此问题,请使用大括号转义组号。
s=Regex.Replace(s,"(Test Number )(\d)","${1}" & newNumber)
这是一个有效的dotnetfiddle示例:https://dotnetfiddle.net/1gZKNB
答案 1 :(得分:1)
Dim s as String = "We are on Test Number 1"
Dim newNumber as Integer = 2
s=Regex.Replace(s,"(Test Number) (\d)","$1 " & newNumber)
问题在于,当你连接时,你最终指定“$ 12”,当然没有捕获12.在这种情况下,我们可以从“测试编号”中取出尾随空格并将其添加到替换中,所以我们的替换字符串是“$ 1 2”,并且捕获替换工作符合要求。
更好,更通用的解决方案,也可以在没有空格时使用,是使用接受Regex.Replace
的{{1}}重载:
MatchEvaluator