2011-03-11 82 views
6

我有一個像「===文本===和===文本===」的輸入字符串,我想用相應的html標記替換wiki語法。正則表達式貪婪問題(C#)

輸入:

===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

試試這個關於大小:HTTP:// regexr .com?2t9he – 2011-03-11 17:03:39

回答

13

添加question mark到您正則表達式(。+?)=== ===

一個更好的替代方法是有以下形式的正則表達式:===([^ \ =] +)===。 請參閱this guide關於點字符的解釋,以節省使用點。當基準我提供的正則表達式,它是大約。比你的正則表達式快50%。

+0

謝謝。我拿了第二個「===([^ \ =] +)===」。 – dannyyy 2011-03-11 22:08:16

3

要使正則表達式不貪婪,你使用?

所以表達式「=== ===(+?)」就對你有兩場比賽 - 所以應該讓你產生<h1>text</h1><h1>text</h1>

0

簡單DD一個?可能?

===.+?=== 
0

我會添加另一種變體:===((?:(?!===).)*)===(停止捕獲任意字符,當你遇到===)哦......並通過WiseGuyEh建議.問題,我建議RegexOptions.SingleLine,使.比賽甚至換行符。

0

和公正的信息,如果別人有那麼同樣的問題,我有 - 避免匹配也====Text====代替===Text===我已經擴展模式是這樣的:(?<!=)===([^=]+)===(?!=)