我預計會有一些其他的方法可以做到這一點,但我想出了一個使用named groups
和anonymous methods
以下辦法。
我在我的例子中假設123,456,789分別被111,444,777替換,而000將保持完整的字符串。
我已經使用了name the group
的一種方法,其值將被用作a replacement value
。例如,在這個部分中:
(?< 111> 123)=值123將被111取代,其中111也是組的名稱。
所以,一般的模式將成爲:(?<ValueToReplace>ValueToSearch)
這裏是一個示例代碼:
Dim sampleText = "123 456 789 000"
Dim re As New Regex("\b(?<111>123)\b|\b(?<444>456)\b|\b(?<777>789)\b")
Dim count As Integer = re.Matches(sampleText).Count
Dim contents As String = re.Replace(sampleText, New MatchEvaluator(Function(c) re.GetGroupNames().Skip(1).ToArray().GetValue(c.Captures(0).Index Mod count).ToString()))
從你的方法,我希望你在VB.Net工作,但我已經連接了一個C#版本太多。
這裏,是C#版本:
var sampleText = @"123 456 789 000";
Regex re = new Regex(@"\b(?<111>123)\b|\b(?<444>456)\b|\b(?<777>789)\b");
int count = re.Matches(sampleText).Count;
string contents = re.Replace(sampleText, new MatchEvaluator((c) => re.GetGroupNames().Skip(1).ToArray().GetValue(c.Captures[0].Index % count).ToString()));
那麼你的意思是你要在一個固定的'replacePattern',做不同的事情取決於輸入通過? – Tomalak
爲什麼不執行兩個Regex.Replace commmands? – Paparazzi