2014-01-10 43 views
-1

我試圖找到一種組合使用正則表達式的字符串,但它不工作找到一個組合在python

>>> whole = ('\n1. WIPO is located at\n(A) New York\n(B) London\n(C) Geneva\n(D) Paris\n') 
>>> match = re.findall('1\.\s(\w+\s)+\w+\n', whole) 
>>> print(match) 
['located'] 

我想它返回"1. WIPO is located at\n"。但它僅僅是返回['located ']

回答

1

製作組非捕獲,使用(?:...)代替(...)

re.findall('1\.\s(?:\w+\s)+\w+\n', whole) 

如果捕獲組都存在,re.findall()改變行爲,只返回匹配組;沒有捕獲組全場比賽返回代替:

>>> import re 
>>> whole = '\n1. WIPO is located at\n(A) New York\n(B) London\n(C) Geneva\n(D) Paris\n' 
>>> re.findall('1\.\s(?:\w+\s)+\w+\n', whole) 
['1. WIPO is located at\n'] 

如果你只希望那裏是一個比賽,那麼就不要使用re.findall()但使用re.search()相反,在產生的Match實例調用.group()

>>> re.search('1\.\s(?:\w+\s)+\w+\n', whole).group() 
'1. WIPO is located at\n' 

在這裏,它不再重要,如果該組正在捕獲或不。

+0

所以,在菜鳥方面,我已經把‘:’在每次捕捉後‘(:‘不 – Ufoguy

+0

@Ufoguy:的確,那是語法?’你能解釋一下?’?捕捉組和非捕捉組之間的區別。 –