正则表达式贪心问题(C#)

我有一个输入字符串,如“=== text ===和=== text ===”,我想用相应的html标签替换wiki语法。

输入:

===text=== and ===text=== 

理想输出:

 

text

and

text

但是使用以下代码我得到这个输出:

 var regex = new Regex("---(.+)---"); var output = regex.Replace("===text=== and ===text===", "

$1

");

text=== and ===text

我知道问题是我的正则表达式与贪婪相匹配。 但是如何让他们不贪心。

谢谢你,亲切的问候。 丹尼

将问号添加到正则表达式:===(。+?)===

更好的选择是使用以下forms的正则表达式:===([^ \ =] +)===。 有关使用点的说明,请参阅本指南中的点字符。 在对我提供的正则表达式进行基准测试时,它是大约。 比正则表达式快50%。

为了使正则表达式不贪心你用?

所以表达式“===(。+?)===”会有两个匹配 – 所以应该允许你生成

text

text

简单地说? 也许?

 ===.+?=== 

我将添加另一个变体: ===((?:(?!===).)*)=== (当你遇到===时停止捕捉任何角色)…哦…并且为了. WiseGuyEh建议的问题,我建议RegexOptions.SingleLine,以便. 甚至匹配换行符。

只是为了信息,如果其他人有相同的问题,那么我 – 避免匹配也====Text====而不是===Text===我已经扩展了这样的模式: (?