2012-03-16 34 views
0

是否可以構建一個匹配儘可能多的組的正則表達式,在字符串停止匹配時放棄?例如:匹配Python正則表達式中的某些組

import re  
s = 'a b' 
m = re.search('(\w) (\w) (\w)') 

我想m.group(1)以包含 'a' 和m.group(2)包含 'b' 和m.group(3)含有無。

但是re.search()在這種情況下不包含任何組。

回答

3

該模式正在尋找一個單詞字符後跟一個空格,後跟一個單詞字符後跟一個空格,後跟一個單詞字符,但您的字符串只有一個字母,一個空格和一個字母,所以永遠不會匹配。您需要修改該模式以允許任何可選部分:

import re 
s = 'a b' 
m = re.search('(\w) (\w)((\w))?', s) 

請注意最終空間和(\ w)組周圍的零件。他們創建另一個組,由?修飾符使其成爲可選組。如果您不希望顯示在比賽對象了這個額外的組,則可以使其成爲「非捕獲」組:

m = re.search('(\w) (\w)(?: (\w))?', s) 

m現在不包括(可選的)最終空間羣和單詞字符,但僅適用於任何匹配的單詞字符。