如何使用re.match()同时收集所有捕获的子字符串?

时间:2018-09-13 07:29:50

标签: python regex

我正在对文本输入应用多种正则表达式模式,希望它们能自动输入到列表中。

例如

import re
raw='NIH05484225_1_binders_list ID_054345 Proteincomplex /D1/ERBH1_ERV_ACWX'

regex= '.*Proteincomplex /[\S]+\/([\S]+)_([\S]+)_([\S]+)'
regex=re.compile(regex)


result = re.match(regex, raw)
answer=[]
answer.append (result.group(1))
answer.append (result.group(2))
answer.append (result.group(3))

print (answer)

有没有办法让answer收集所有捕获的结果? 如

answer.extend (result.allgroups()) # does not work, of course

1 个答案:

答案 0 :(得分:1)

您可以使用Match.groups()

  

返回一个包含匹配项所有子组的元组,从1到模式中的许多组。 default 参数用于未参与比赛的组;它默认为None

因此,您可以通过以下方式修改代码:

import re
raw='NIH05484225_1_binders_list ID_054345 Proteincomplex /D1/ERBH1_ERV_ACWX'
regex=re.compile(r'.*Proteincomplex\s+/\S+\/(\S+)_(\S+)_(\S+)')
result = re.match(regex, raw)
if result:
    print (answer.groups())

请注意,您不需要用字符类和\S来包装每个\s+,而不必使用空格来包装任何匹配的空格(它被认为更具可读性且失败,安全,特别是如果您打算以后使用re.VERBOSE / re.X在模式中插入注释或将空格格式化的话。