用findall捕获组?

如果我find了findall(r'regex(with)capturing.goes.here')我怎样才能访问被捕获的组? 我知道我可以通过finditerfinditer ,但我不想迭代。

findall只是返回捕获的组:

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

相关文档摘录:

返回string中模式的所有非重叠匹配项,作为string列表。 string从左到右扫描,匹配按find的顺序返回。 如果模式中存在一个或多个组,则返回组的列表; 这将是一个元组列表,如果该模式有多个组。 空结果包含在结果中,除非他们触及另一场比赛的开始。

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

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

如果你想包含完整的匹配,只需将整个正则expression式放在一个组中:

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

几种方法是可能的:

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

如果你的string是多行的, re.M会有意义。 你也需要VERBOSE (等于re.X )模式在我写的正则expression式,因为它使用'''