2012-02-06 183 views
0

我正在嘗試構建一個只匹配下面的string2的正則表達式。RegEx.Match不返回預期結果

串1:(ABC12:CPBI,OTCBB:CPBI)

串2:(ABC12:CPBI OTCF CPBI)

以下是我的C#代碼

private static Regex rxSymbol = new Regex(@"(?<=:)[&/\w -]+\s*(?=\))", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); 

rxSymbol.IsMatch(ticker) 

isMatch語句返回對於string1爲true。當我試圖使用rxSymbol.Match(ticker)獲得完全匹配時,這與「CPBI」匹配。

在我的代碼中使用之前,我在RegexHero中測試了這個正則表達式。它在正則表達式英雄中正常工作。

有人可以幫我弄清楚我的正則表達式有什麼問題。

更新:

我意識到的問題是什麼: 我想要的正則表達式來僅在第一之間的文本返回true:和第一),此模式匹配:/ [&/\ W - ] + \ S */

在我的例子字符串(ABC12:CPBI,OTCBB:CPAA)有兩個:和正則表達式是匹配第二之間的文本:和)

如何修改這個正則表達式來執行我的要求。

+0

必須轉義正斜槓。你的表達式可以在你的示例字符串中找到:http://rubular.com/r/4ZFl3222jT,只是轉義正斜槓。它應該/不應該做什麼? – deltree 2012-02-06 17:10:27

+0

感謝您的評論。 C sharp正則表達式能夠處理正斜槓而不會溢出。可能是因爲正則表達式模式被包含在「」中,而不是在javascript中。但是你的紅細胞樣本幫助我意識到它與第二個結腸之間的文本匹配)。 – 2012-02-06 17:40:31

回答

2

這似乎做

(?<=\(\w+:)(\s*\w+)+(?=\)) 

我指定的第一部分(ABC12:\(\w+:的伎倆。我也用更具體的(\s*\w+)+替換了中間部分。

還請注意,在方括號內[],特殊字符失去其含義。每個角色都按原樣拍攝。

+0

謝謝。它按預期工作。 – 2012-02-06 17:49:09