我必须在文本中搜索多个字符串。是否可以在一个编译语句中搜索多个模式。
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!'
答案 0 :(得分:1)
您可以在正则表达式中使用管道(|
)来组合多个表达式,只需要一个在给定点匹配。例如,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
。