我必须在文本中搜索多个字符串。是否可以在一个编译语句中搜索多个模式。
text_data = """Errors err:
err
Error"""
comp = re.compile('Error err') #
comp.search(text_data)
一种选择是以以下方式创建列表,但在我的情况下,text_data是一个巨大的文件,我必须重复多次。
regexes = [ re.compile(p) for p in [ 'Error',
'err',
'Error err'
]
]
for regex in regexes:
if regex.search(text_text_data):
print 'found a match!'
您可以在正则表达式中使用管道(|
)来组合多个表达式,在给定的点上只需要一个匹配。例如,A|B
将与A
或B
相匹配。
您也可以在不捕获组的情况下执行此操作,因此例如A(B|C)D
将匹配ABD
和ACD
。
在您的情况下,您可以简单地将三个部分组合为以下表达式:
Error|err|Error err
示例:
>>> r = re.compile('Error|Error err|err')
>>> r.findall(text_data)
['Error', 'err', 'err', 'Error']
(请记住,re.search
只会给您找到的第一个匹配项,所以我在这里使用re.findall
)。