gpt4 book ai didi

c# - 正则表达式替换 : Transform pattern with a custom function

转载 作者:太空狗 更新时间:2023-10-30 00:15:02 25 4
gpt4 key购买 nike

假设我有一些这样的文本:

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

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

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

最佳答案

使用 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 委托(delegate)中检索该组并传递给您实际的 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 委托(delegate)。

关于c# - 正则表达式替换 : Transform pattern with a custom function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17747919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com