Python正则表达式:如何搜索多个模式字符串的模式?

4
我需要在文件中搜索以下模式,(任何匹配都可以)
pattern_strings = ['\xc2d', '\xa0', '\xe7', '\xc3\ufffdd', '\xc2\xa0', '\xc3\xa7', '\xa0\xa0', '\xc2', '\xe9']
pattern = [re.compile(x) for x in pattern_strings]

使用这个函数。
def find_pattern(path):
    with open(path, 'r') as f:
        for line in f:
            found = pattern.search(line)
            if found:
                logging.info('found - ' + found)

当我尝试使用它时

find_pattern('myfile')

我看到的是 AttributeError: "'list' object has no attribute 'search'"

因为 patterns

[<_sre.SRE_Pattern object at 0x107948378>, <_sre.SRE_Pattern object at 0x107b31c70>, <_sre.SRE_Pattern object at 0x107b31ce0>, <_sre.SRE_Pattern object at 0x107ac3cb0>, <_sre.SRE_Pattern object at 0x107b747b0>, <_sre.SRE_Pattern object at 0x107b74828>, <_sre.SRE_Pattern object at 0x107b748a0>, <_sre.SRE_Pattern object at 0x107b31d50>, <_sre.SRE_Pattern object at 0x107b31dc0>]

如何有一个模式可以搜索pattern_strings中的所有字符串?

1个回答

4
您可以使用竖线 | 将所有表达式简单地连接在一起:
pattern_strings = ['\xc2d', '\xa0', '\xe7', '\xc3\ufffdd', '\xc2\xa0', '\xc3\xa7', '\xa0\xa0', '\xc2', '\xe9']
pattern_string = '|'.join(pattern_strings)
pattern = re.compile(pattern_string)

然而,这假定您的模式都不够复杂,以至于像这样简单的连接可能会出现问题。对于您示例中的模式,应该可以工作。但对于更复杂的模式,则可能无法正常工作。


2
你还应该将列表按照从长到短的顺序排序...否则你将得到意料之外的结果。 - Joran Beasley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接