正则表达式贪心问题(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===
我已经扩展了这样的模式: (?