我正在对文本输入应用多种正则表达式模式,希望它们能自动输入到列表中。
例如
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
答案 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
在模式中插入注释或将空格格式化的话。