如何在C#中的RegEx替换操作中使用计算值?
我正在寻找一种方法来使用c#regex.replace函数在replace表达式中使用匹配组的长度。
也就是说,我可以替换什么? 在下面的示例中,获得下面显示的所需输出?
例:
val = Regex.Replace("xxx", @"(?x{1,6})", "${exes} - ???");
期望的输出
X - 3
注意:这是一个非常人为/简化的例子来certificate这个问题。 我意识到在这个例子中,正则表达式不是理想的做法。 请相信我,答案的真实世界应用是一个更复杂的问题的一部分,需要在这里使用RegEx替换。
尝试使用调用函数的Regex.Replace
版本来确定替换文本应该是什么:
public string Replace(string, MatchEvaluator);
http://msdn.microsoft.com/en-us/library/aa332127(VS.71).aspx
然后,该函数可以查看匹配的文本( Match
对象作为评估器函数的参数提供)并返回具有正确计算值的字符串。
如果您使用的是C#3,则只需从lambda表达式创建一个MatchEvaluator:
string val = Regex.Replace( "xxx", @"(?x{1,6})", new MatchEvaluator( m => m.Groups["exes"].Value[0] + " - " + m.Groups["exes"].Value.Length.ToString() ) );
在C#2中,您可以使用委托:
string val = Regex.Replace( "xxx", @"(?x{1,6})", new MatchEvaluator( delegate(Match m) { return m.Groups["exes"].Value[0] + " - " + m.Groups["exes"].Value.Length.ToString(); } ) );
尝试
val = Regex.Replace("xxx", @"(?x{1,6})", new MatchEvaluator(ComputeReplacement));
使用下面的MatchEvaluator示例
public String ComputeReplacement(Match matchResult) { return matchResult.Value.Length.ToString(); }
(从正则表达式菜谱中部分被盗 – 我的圣经哈哈)