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

なぜならパターンは

[<_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>]

内のすべての文字列を検索する 1 つのパターンを作成するにはどうすればよいpattern_stringsですか?

4

1 に答える 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)

ただし、これは、このような単純な連結が壊れるほど複雑なパターンがないことを前提としています。あなたの例のものについては、うまくいくはずです。より複雑なパターンの場合、そうでない場合があります。

于 2012-07-27T18:10:32.283 に答える