2011-06-14 67 views
1

有人可以解釋爲什麼「1」被包含在第一個正則表達式組而不是第二個?NET正則表達式問題

Match match = Regex.Match("q10", @"(\w+)(\d+)"); 
//Ugh, Regex group indicies are 1-based not 0-based. 
Console.WriteLine(match.Groups[1].Value); //Expected "q" got "q1" 
Console.WriteLine(match.Groups[2].Value); //Expected "10" got "0" 
+0

順便說一句,他們不是真的基於1。組0應該包含整個比賽。 – 2011-06-14 19:33:56

+0

@Justin是的,我知道,但它並不是真正的團體之一,它本身就是比賽,所以它並不真的覺得它應該成爲集合的一部分。 – Davy8 2011-06-14 20:11:13

回答

2

\w匹配字母數字字符(和下劃線)。

你想要[A-Za-z]

+0

謝謝,我想我應該有RTFM。出於某種原因,我雖然只是阿爾法,而且我的大腦告訴我「w」代表「word」 – Davy8 2011-06-14 19:31:12

+1

它實際上代表了單詞。 – SLaks 2011-06-14 19:31:32

+0

數字不是我的書我的書! * facepalm *哦,現在我知道了。直到我再次忘記:p – Davy8 2011-06-14 19:33:11

2

正則表達式匹配是貪婪的,所以(\w+)涵蓋儘可能多的,因爲它可以(\d+)之前。由於1是一個單詞字符,它在第一組中被捕獲到\w

您可以使用此捕捉你想要的方式:

Match match = Regex.Match("q10", @"([a-z]+)(\d+)"); 
+0

問題是我誤解\ w是什麼,但是+1,因爲它可能對別人有幫助。 – Davy8 2011-06-14 19:33:29