C# Regex.Replace 匹配相同数量的字符
Posted
技术标签:
【中文标题】C# Regex.Replace 匹配相同数量的字符【英文标题】:C# Regex.Replace match by the same amount of characters 【发布时间】:2019-04-18 18:05:08 【问题描述】:我想知道如何将未知数量的等号(不少于 2...)的正则表达式匹配替换为相同数量的下划线
到目前为止,我得到了这个:
text = Regex.Replace(text, "(=2,)", "");
我应该使用什么作为第三个参数?
编辑:最好是兼容所有语言的正则表达式解决方案
【问题讨论】:
有输入/输出的例子吗?如果您只想替换任何=
符号,只需将每个=
替换为单个_
。如果你有===
,它将变为___
。
但它们必须至少是 2 个连续的等号,1 个等号应该只是一个等号
那么,这是应该提到的问题的重要部分!这就是示例输入/输出有助于确定替换规则的原因。
【参考方案1】:
您可以改用Regex.Replace(String, MatchEvaluator) 并分析数学:
string result = new Regex("(=2,)")
.Replace(text, match => new string('_', match.ToString().Length));
【讨论】:
【参考方案2】:一个不太明确的答案(就代码清晰度而言):
text = Regex.Replace(text, "=(?==)|(?<==)=", "_");
如果连续有超过 2 个=
,那么在每个=
,我们会在前面或后面找到一个=
。
这只有在语言支持look-behind时才有效,包括C#、Java、Python、PCRE...并且不包括javascript。
但是,由于您可以在 JavaScript 中将函数传递给 String.replace
函数,因此您可以编写类似于 Alexei Levenkov 的答案的代码。实际上,Alexei Levenkov 的答案适用于多种语言(当然,Java 除外)。
【讨论】:
感谢您的详细解答 @user3160134:不知道你为什么接受我的回答。它比传入替换函数的解决方案更令人困惑。我写这个答案是为了展示,而不是提倡。以上是关于C# Regex.Replace 匹配相同数量的字符的主要内容,如果未能解决你的问题,请参考以下文章