假设我有一些文本,例如:
[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(使用前将#替换为@)