2012-09-13 88 views
2

在C#,VS 2010中使用正則表達式。下面是代碼。當我期待時只獲得一個匹配3

static string capturePattern = @"\|([!-|]{2})([!-|]{2})([!-|]{2})?([!-|]{2})?([!-|]{2})?([!-|]{2})?([!-|]{2})?\|"; 

Regex rgx = new Regex(capturePattern); 

string TS="!3829.87N/12033.82Wv169/000|!('d%*|" 

MatchCollection matches = rgx.Matches(TS); 

matches.Count結束向上爲1和火柴[0]爲 「|!('d%* |」。

我期待matches.Count爲3,並解析字符串是:

matches[0] = "!(" 
matches[1] = "'d" 
matches[2] = "%*" 

我做了什麼錯

回答

1

您的正則表達式將條形圖|之間的所有內容捕獲到一個匹配中。如果你想要括號中的部分,那些在match[0].Groups

Group[0]是整個捕獲組。組1,組2,以及可選的3以上將成爲括號中的字符對。

在你的情況,matches.Count將爲1,匹配[0] .Groups.Count將4,具有:我已經使用快報

matches[0].Group[1] == "!(" 
matches[0].Group[2] == "'d" 
matches[0].Group[3] == "%*" 
+0

Coincoin,我只是編碼這個,唯一的問題是匹配[0] .Groups.Count回來了8,而不是4.額外的四個字符串是空的而且不需要。不應該'?'在表達式中讓這些匹配是可選的? –

-1

regexPlanet是你的朋友,測試你的e在那裏xpressions。

+0

和表達行爲與預期在那裏。差異發生在我正在寫的實際程序中。 –

+0

作爲一名中途聰明的人,我訪問了該網站,確實是我的朋友。它在.NET環境中給出了具體的指導。 返回編碼..... –

+0

RegexBuddy比這更好,雖然它不是免費的。不過,我會推薦它:http://www.regexbuddy.com – Odrade

相關問題