在regex.replace中将变量与正则表达式组匹配

时间:2012-04-05 16:44:26

标签: regex vb.net

我遇到的问题是我使用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的替换字符串部分中使用变量有任何想法?

提前致谢。

2 个答案:

答案 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