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