用findall捕获组?

时间:2011-05-16 13:43:41

标签: python regex

如果findall(r'regex(with)capturing.goes.here'),我如何访问捕获的群组? 我知道我可以通过finditer来完成,但我不想迭代。

4 个答案:

答案 0 :(得分:54)

findall只返回捕获的组:

>>> re.findall('abc(de)fg(123)', 'abcdefg123 and again abcdefg123')
[('de', '123'), ('de', '123')]

相关文件摘录:

  

返回所有非重叠的匹配项   字符串中的模式,作为列表   字符串。扫描字符串   从左到右,比赛是   按顺序返回。如果一个或   更多的团体出现在   模式,返回组列表;这个   将是一个元组列表,如果   模式有多个组。空   匹配包含在结果中   除非他们触及开头   另一场比赛。

答案 1 :(得分:19)

自由使用群组。匹配将作为组元组列表返回:

>>> re.findall('(1(23))45', '12345')
[('123', '23')]

如果要包含完整匹配,只需将整个正则表达式括在一个组中:

>>> re.findall('(1(23)45)', '12345')
[('12345', '23')]

答案 2 :(得分:1)

有几种方法可以:

>>> import re
>>> r = re.compile(r"'(\d+)'")
>>> result = r.findall("'1', '2', '345'")
>>> result
['1', '2', '345']
>>> result[0]
'1'
>>> for item in result:
...     print(item)
...
1
2
345
>>>

答案 3 :(得分:0)

import re
string = 'Perotto, Pier Giorgio'
names = re.findall(r'''
                 (?P<first>[-\w ]+),\s #first name
                 (?P<last> [-\w ]+) #last name
                 ''',string, re.X|re.M)

print(names)

返回

[('Perotto', 'Pier Giorgio')]
如果你的字符串是多行的话,

re.M会有意义。此外,您在我正在编写的正则表达式中需要VERBOSE(等于re.X)模式,因为它正在使用'''