6

我有一个像 "===text=== 和 ===text===" 这样的输入字符串,我想用相应的 html 标记替换 wiki 语法。

输入:

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

理想的输出:

<h1>text</h2> and <h1>text</h2>

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

var regex = new Regex("---(.+)---");
var output = regex.Replace("===text=== and ===text===", "<h1>$1</h1>");

<h1>text=== and ===text</h1>

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

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

4

5 回答 5

14

问号添加到您的正则表达式中:===(.+?)===

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

于 2011-03-11T17:05:09.263 回答
3

要使正则表达式不贪心,您使用?

因此,表达式 "===(.+?)===" 将为您提供两个匹配项-因此应该允许您生成<h1>text</h1><h1>text</h1>

于 2011-03-11T17:02:03.143 回答
0

简单地 dd a?也许?

===.+?===
于 2011-03-11T17:03:12.037 回答
0

我将添加另一个变体:(===((?:(?!===).)*)===遇到时停止捕获任何字符===)...哦...对于 WiseGuyEh 提出的.问题,我建议使用 RegexOptions.SingleLine,以便.匹配换行符。

于 2011-03-11T17:10:36.277 回答
0

如果其他人有同样的问题,那么我就有了信息——为了避免匹配====Text=======Text===我已经像这样扩展了模式:(?<!=)===([^=]+)===(?!=)

于 2011-03-14T15:57:20.277 回答