2012-06-05 262 views
2

之間返回字符串我試圖使用C#兩個標籤

var added = Regex.Match(Text, 
"\[BEGINTAG\](.+?)\[\/ENDTAG\]",RegexOptions.None); 

返回標籤[BEGINTAG]和[/ ENDTAG]文本字符串之間的字符串。我無法弄清楚我的正則表達式常量有什麼問題。

回答

2

你的正則表達式很好。你只需要提取1組(你括號之間不匹配的東西)

在C#這成爲

Regex regexObj = new Regex(@"\[BEGINTAG\](.+?)\[/ENDTAG\]"); 
resultString = regexObj.Match(subjectString).Groups[1].Value; 

讓我知道這是否正常工作

此外,僅供參考,您不需要和你一樣逃脫。這也不錯:

\[BEGINTAG](.+?)\[/ENDTAG] 
+0

如果您對性能感興趣,很高興知道\ [BEGINTAG]([^ [] *)\ [/ ENDTAG]不需要任何回溯,預計效果會更好。 – buckley

+0

謝謝,工作完美。 – Subliminy

0

一個可能的問題是,你沒有你的字符串前@,所以C#是治療\字符作爲C#逃逸,而不是正則表達式逃逸。

Buckley的回答顯示如何用@作爲字符串的前綴,以便將\作爲正則表達式轉義處理。在C#中使用這種格式的正則表達式幾乎總是更好。否則,你會得到這樣的結果。

var added = Regex.Match(Text, 
    "\\[BEGINTAG\\](.+?)\\]\\/ENDTAG\\]", RegexOptions.None); 

我發現很難讀。