2011-10-24 76 views
0

我想要子字符串,如果他們有一定的格式。子串正則表達式查詢是[CENAOD(xyx)]。我已經完成了下面的代碼,但是在循環中運行它時,它表示所有結果都匹配哪個是錯誤的。我在哪裏做錯了什麼?正則表達式接受所有字符串,wronly

string strRegex = @"(\[CENAOD\((\S|\W)*\)\])*"; 
string strCenaOd = sReader["intro"].ToString() 
if (Regex.IsMatch(strCenaOd, strRegex, RegexOptions.IgnoreCase)) 
{ 
     string = (want to read content of () = xyz in example) 
} 

回答

1

添加到@ Kent's和@ leppie的答案,圍繞正則表達式的代碼也需要工作。我想這是你試圖爲:

string strRegex = @"\[CENAOD\(([^)]*)\)\]"; 
string strCenaOd = sReader["intro"].ToString(); 
Match m = Regex.Match(strCenaOd, strRegex, RegexOptions.IgnoreCase); 
if (m.Success) 
{ 
    string content = m.Groups[1]; 
    // ... 
} 

IsMatch()是一個簡單的是或否的檢查,它不提供任何方法來檢索匹配的文本。

我特別想從你的正則表達式中對(\S|\W)*發表評論。首先,\S|\W是一種非常低效的匹配任何角色的方法。 .通常是您所需要的,但正如Kent指出的那樣,[^)](即,除)之外的任何字符)在這種情況下更合適。另外,通過將*置於圓括號之外,您將只捕獲最後一個字符。 ([^)]*)捕獲所有這些。欲瞭解更多詳情,請致電read this

1

,如果你說「的所有字符串」,怎麼樣:

\[CENAOD\([^\)]*\)\] 
2

取下外(...)*

這就是說不匹配也是一個很好的匹配。

或使用+而不是*

相關問題