我希望还有其他一些方法可以做到这一点,但我想出了以下使用named groups
and的方法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()));