2013-05-05 80 views
4

匹配這個正則表達式的過程是什麼?我不明白爲什麼顯式組是'c'。這段代碼是從Python Re模塊文檔中提取的。Python Re模塊在這個例子中如何工作?

>>> m = re.match("([abc])+", "abc") 
>>> m.group() 
'abc' 
>>> m.groups() 
('c',) 

此外,何談:

>>> m = re.match("([abc]+)", "abc") 
>>> m.group() 
'abc' 
>>> m.groups() 
('abc',) 

和:

>>> m = re.match("([abc])", "abc") 
>>> m.group() 
'a' 
>>> m.groups() 
('a',) 

感謝。

回答

6
re.match("([abc])+", "abc") 

匹配組成的,b或c的基團。最後一組是在字符類中找到的最後一個字符,因爲匹配是貪婪的,所以最後的匹配字符是c

m = re.match("([abc]+)", "abc") 

匹配包含一個或多個連續出現的a,b或c的組。最後的匹配組是a,b或c中最大的冗餘組。

re.match("([abc])", "abc") 

匹配a,b或c。匹配組將始終是字符串開頭的第一個匹配字符。

+0

總是很奇怪,要與其他人同時發佈! +1 – 2013-05-05 07:22:59

3

在第一個示例中,([abc])+爲其找到的每個a,b或c字符創建一個組。 c是明確的組,因爲它是最後一個字符的正則表達式匹配:

>>> re.match("([abc])+", "abca").groups() 
('a',) 

在你的第二個例子,你要創建一個符合一個或多個的,B的,或c的連續組。因此,您爲abc創建一個組。如果我們延長abc,該集團將與字符串擴展:

>>> re.match("([abc]+)", "abca").groups() 
('abca',) 

在你的第三個例子,正則表達式正在尋找一個字符是一個a,一個B,或C。由於a是abc中的第一個字符,因此您會得到一個a。這改變如果我們改變的第一個字符的字符串:

>>> re.match("([abc])", "cba").group() 
'c' 
+0

擴展第二個示例組的好例子+1 – 2013-05-05 07:25:16

相關問題