在python中使用正则表达式在字符串中查找组合

时间:2014-01-10 17:41:54

标签: python regex string python-2.7

我正在尝试找到一个组合,但它无法正常工作

>>> 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 ']

2 个答案:

答案 0 :(得分: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()代替,并在生成的.group()实例上调用Match

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

此处,群组是否正在捕捉不再重要。

答案 1 :(得分:0)

查看Match Object

print match.groups()