用findall捕获组?
如果我find了findall(r'regex(with)capturing.goes.here')我怎样才能访问被捕获的组? 我知道我可以通过finditer来finditer ,但我不想迭代。 
  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式,因为它使用'''