我一直在玩正在使用正則表達式從字符串檢索數據,主要是作爲我自己的練習。我試圖要匹配的模式看起來像這樣:C#正則表達式,檢索用逗號分隔的兩個單詞,括號運算符
"(SomeWord,OtherWord)"
閱讀一些文件,看着我得出的結論備忘單之後,下面的正則表達式應該給我2場比賽:
"\((\w),(\w)\)"
由於根據文檔括號應執行以下操作:
(模式)與模式匹配和記住匹配。匹配的 子串可以使用Item [0] ... [n]從結果匹配集合 中檢索。要匹配括號字符(),請使用「\(」或 「\)」。
但是使用下面的代碼(刪除錯誤檢查簡潔)匹配非常不同的東西:
string line = "(A,B)";
string pattern = @"\((\w),(\w)\)";
MatchCollection matches = Regex.Matches(line, pattern);
string left = matches[0].Value;
string right = matches[1].Value;
現在我希望留下來成爲「A」,併成爲「B」的權利。然而,左變成了「(A,B)」,並且根本沒有第二次比賽。我在這裏錯過了什麼?
(我知道這個例子很簡單沒有正則表達式,但要學會如何正確地使用正則表達式我應該可以做一些簡單的,因爲這解決工作)
嘿pstrjds,這的確做到了,我會接受在幾分鐘內你的答案!由於文檔明確地談論了匹配項目,所以我沒有想到看看組。謝謝你的幫助! –
對。 MatchCollection是針對模式的匹配集合,而不是模式中標識的字符串集合。如果輸入是「'(A,B)blah(C,D)'」,則在MatchCollection中會有兩個匹配 - 一個用於「(A,B)」,另一個用於「 ,D)'',與'matches [0] .Groups [1] .Value ==「A」','matches [0] .Groups [2] .Value ==「B」','matches [1] .Groups [1] .Value ==「C」',和'matches [1] .Groups [2] .Value ==「C」'。 'Groups [0]'總是包含匹配的整個字符串:'matches [0] .Groups [0] .Value ==「(A,B)」'和'matches [1] .Groups [0] .Value ==「(C,D)」'。 –