我有一个输入字符串,如“=== 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>
我知道问题是我的正则表达式与贪婪相匹配。但是如何让他们不贪心。
谢谢你,亲切的问候。丹尼
答案 0 :(得分:14)
将question mark添加到正则表达式:===(。+?)===
更好的选择是使用以下形式的正则表达式:===([^ \ =] +)===。 有关使用点的说明,请参见点字符上的this guide。在对我提供的正则表达式进行基准测试时,它是大约。比正则表达式快50%。
答案 1 :(得分:3)
为了让正则表达式不贪心你用吗?
所以表达式“===(。+?)===”会有两个匹配 - 所以应该允许你生成<h1>text</h1>
和<h1>text</h1>
答案 2 :(得分:0)
简单地说?
可能吗?
===.+?===
答案 3 :(得分:0)
我会添加另一个变体:===((?:(?!===).)*)===
(遇到===
时停止捕捉任何角色)...哦......以及WiseGuyEh建议的.
问题,我建议使用RegexOptions.SingleLine,以便.
匹配换行符。
答案 4 :(得分:0)
只是为了获取信息,如果其他人遇到了同样的问题,那么为了避免匹配====Text====
而不是===Text===
我已经扩展了这样的模式:(?<!=)===([^=]+)===(?!=)