re.compile pasing mutliple pattern for match string

时间:2015-10-29 08:04:04

标签: python-2.7

我必须在文本中搜索多个字符串。是否可以在一个编译语句中搜索多个模式。

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!'

1 个答案:

答案 0 :(得分:1)

您可以在正则表达式中使用管道(|)来组合多个表达式,只需要一个在给定点匹配。例如,A|B将匹配AB

您也可以在不捕获群组的情况下执行此操作,例如A(B|C)D将匹配ABDACD

在您的情况下,您可以简单地将三个部分组合到以下表达式中:

Error|err|Error err

示例:

>>> r = re.compile('Error|Error err|err')
>>> r.findall(text_data)
['Error', 'err', 'err', 'Error']

(请注意,re.search只会为您提供找到的第一个匹配项,因此我在这里使用re.findall