C#Regex.Replace匹配相同数量的字符

时间:2014-02-22 06:42:59

标签: c# regex string text replace

我想知道如何将未知数量的等号的正则表达式匹配替换为相同数量的下划线

到目前为止,我得到了这个:

text = Regex.Replace(text, "(={2,})", ""); 

我应该使用什么作为第三个参数?

编辑:正是一种兼容所有语言的正则表达式解决方案

2 个答案:

答案 0 :(得分:5)

您可以使用Regex.Replace(String, MatchEvaluator)来分析数学:

string result = new Regex("(={2,})")
    .Replace(text, match => new string('_', match.ToString().Length)); 

答案 1 :(得分:1)

一个不那么明确的答案(在代码清晰度方面):

text = Regex.Replace(text, "=(?==)|(?<==)=", "_");

如果一行中有=个以上=,那么在每个=,我们都会找到String.replace前方或后方。

这只适用于语言支持look-behind,包括C#,Java,Python,PCRE ......并且不包括JavaScript。

但是,由于您可以在JavaScript中将函数传递给{{1}}函数,因此您可以编写类似于Alexei Levenkov答案的代码。实际上,Alexei Levenkov的答案适用于多种语言(除了Java之外)。