在正则表达式中替换多个捕获组

3

VB2005:我已经花了几个小时看正则表达式,但好像无法理解如何在我的情况下使用.Replace。我正在寻找两个字段,然后我想用新值替换这些字段。所以我的字符串看起来像这样:

Dim myInputString as string ="RTEMP                 MIN<240  MAX<800"

我的正则表达式是

dim ptn as string = "RTEMP\s{17}MIN<(?<min>(\d|\s){1,3})\s{1,3}MAX<(?<max>(\d|\s){1,3})\s{1,12}"
Dim MyRegex As Regex = New Regex(ptn, RegexOptions.IgnoreCase)

这个功能很好用,它能够捕获我的两个字段。现在我有新的值。

dim newMin as integer = 300
dim newMax as integer = 999

但似乎无法找到一次性替换两个值的方法。

Dim result As String = MyRegex.Replace(myInputString, MyRegexReplace)

我应该把什么放在MyRegexReplace中?这是一个简单的两个值替换,但是我可能会有更多,所以想着肯定有办法可以做到这一点,但需要帮助。

谢谢 AGP


有点不太正规,但你可以这样做 "(RTEMP\s{17}MIN<)(...)(\s{1,3}MAX<)(...)(\s{1,12})" 并替换为 "\1{newMin}\3{newMax}\5", 在其中替换了 newMin 和 newMax。 - mathematical.coffee
这样就是取第一部分,加入新值,中间部分,加入新值,最后部分?是的,我想我知道它是如何工作的。但我需要对20个字段进行操作。这只是一个小例子。不过我会尝试一下。 - sinDizzy
1个回答

0

既然您有两个不同的值要交换到这两个字段中,难道您不想使用两个单独的正则表达式操作吗?

但是如果您想使用一个正则表达式操作,您可以使用MatchEvaluator:

Dim result As string = MyRegex.Replace(myInputString, ReplaceField)

Private Function ReplaceField(match As Match) As String
    ' Use the Index property of the Match to determine what value to use as replacement
End Function

是的,我可以使用两个正则表达式,但这只是我要做的一小部分。最终我将用新值替换20个字段。让我尝试这种方法,看看效果如何。 - sinDizzy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接