假设我有一些这样的文字:
[MyAppTerms.TermName1].[MyAppTerms.TermName2].1- [MyAppTerms.TermNameX] 2- ...
我想[MyAppTerms.Whatever]用结果替换每一个出现的结果ReadTerm( "MyAppTerms.Whatever" ),其中ReadTerm一个静态函数接收一个术语名称并返回当前语言的术语文本.
这是可行的Regex.Replace吗?(欢迎替代方案).我正在研究替换组,但我不确定我是否可以使用它们.
Mat*_*ens 11
使用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);
}
Run Code Online (Sandbox Code Playgroud)
该模式\[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);
}
Run Code Online (Sandbox Code Playgroud)
在这里,您可以在使用它的代码中直接定义求值程序(将逻辑上连接的代码段保持在一起),同时编译器负责构造该MatchEvaluator委托.
| 归档时间: |
|
| 查看次数: |
2578 次 |
| 最近记录: |