使用Regex.Replace(String, MatchEvaluator)
过载。
static void Main()
{
string input = "[MyAppTerms.TermName1]. [MyAppTerms.TermName2]. 1- [MyAppTerms.TermNameX] 2";
Regex regex = new Regex(@"\[MyAppTerms\.([^\]]+)\]");
string output = regex.Replace(input, new MatchEvaluator(RegexReadTerm));
Console.WriteLine(output);
}
static string RegexReadTerm(Match m)
{
// The term name is captured in the first group
return ReadTerm(m.Groups[1].Value);
}
该模式\[MyAppTerms\.([^\]]+)\]
与您的[MyAppTerms.XXX]
标签匹配并XXX
在捕获组中捕获。然后在您的委托中检索该组MatchEvaluator
并传递给您的实际ReadTerm
方法。
使用 lambda 表达式甚至更好(自 C# 3.0 起):
static void Main()
{
string input = "[MyAppTerms.TermName1]. [MyAppTerms.TermName2]. 1- [MyAppTerms.TermNameX] 2";
Regex regex = new Regex(@"\[MyAppTerms\.([^\]]+)\]");
string output = regex.Replace(input, m => ReadTerm(m.Groups[1].Value));
Console.WriteLine(output);
}
在这里,您直接在使用它的代码中定义评估器(将逻辑连接的代码片段保持在一起),而编译器负责构建该MatchEvaluator
委托。