正则表达式替换:使用自定义函数转换模式

2024-04-20

假设我有一些文本,例如:

[MyAppTerms.TermName1]。 [MyAppTerms.TermName2]。 1- [MyAppTerms.TermNameX] 2- ...

我想替换每一个出现的[MyAppTerms.Whatever]结果是ReadTerm( "MyAppTerms.Whatever" ), where ReadTerm是一个静态函数,它接收术语名称并返回当前语言的术语文本。

使用这是否可行Regex.Replace? (欢迎替代方案)。我正在研究替换组,但我不确定是否可以使用它们的函数。


Use the Regex.Replace(String, MatchEvaluator) http://msdn.microsoft.com/en-us/library/cft8645c.aspx超载。

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 method.

使用 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代表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式替换:使用自定义函数转换模式 的相关文章

随机推荐