2012-02-09 139 views
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

+0

这是一个有点哈克,但你可以做'“(RTEMP \ s {17} MIN <)(.. 。)(\ s {1,3} MAX <)(...)(\ s {1,12})“'并替换为”\ 1 {newMin} \ 3 {newMax} \ 5“',其中你已经用newMin&newMax代替了 – 2012-02-09 02:53:52

+0

,所以这需要第一部分,增加新的价值,中间的部分,增加新的价值,最后一部分?是的,我认为我看到它是如何工作的。但我需要为20个领域做到这一点。这只是一个小例子。生病尝试它。 – sinDizzy 2012-02-09 14:56:02

回答

0

既然你有2点不同的值来交换到这些2场,你会不会想用2个独立的正则表达式操作?

但是,如果你想用一个正则表达式的操作,您可以使用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 
+0

是的,我可以使用两个正则表达式,但这是我必须做的一个小例子。最后我用新值替换了20个字段。让我试试这种方法,看看它是如何消除的。 – sinDizzy 2012-02-09 14:57:14