python正则表达式:如何让模式搜索多个模式字符串



我必须在文件中搜索以下模式,(任何匹配都符合条件)

pattern_strings = ['xc2d', 'xa0', 'xe7', 'xc3ufffdd', 'xc2xa0', 'xc3xa7', 'xa0xa0', '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'"

因为图案是

[<_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中的所有字符串?

您可以简单地将所有表达式与|:连接在一起

pattern_strings = ['xc2d', 'xa0', 'xe7', 'xc3ufffdd', 'xc2xa0', 'xc3xa7', 'xa0xa0', 'xc2', 'xe9']
pattern_string = '|'.join(pattern_strings)
pattern = re.compile(pattern_string)

然而,这确实假设您的模式都不够复杂,像这样的简单串联可能会中断。对于您的示例中的那些,它应该有效。对于更复杂的模式,可能不会。

最新更新