2014-01-10 24 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:的确,那是语法?’你能解释一下?’?捕捉组和非捕捉组之间的区别。 –