0
>>> line = '\xc2d sdsdfdslkfsdkfjdsf'
>>> pattern_strings = ['\xc2d', '\xe9']
>>> pattern = '|'.join(pattern_strings)
>>> pattern
'\xc2d|\xe9'
>>> import re
>>> re.findall(pattern, line)
['\xc2d']

ファイルに入れlineて同じ正規表現を実行しようとすると、何も表示されません

def find_pattern(path):
    with open(path) as f:
        for line in f:
            line = line.strip()
            pattern_strings = ['\xc2d', '\xe9'] # or using ['\\xc2d', '\xe9'] doesn't help
            pattern = '|'.join(pattern_strings)
            print re.findall(pattern, line)

path次のようなファイルはどこにありますか
\xc2d sdsdfdslkfsdkfjdsf

そうですか

\xc2d
[]
d\xa0
[]
\xe7
[]
\xc3\ufffdd
[]
\xc3\ufffdd
[]
\xc2\xa0
[]
\xc3\xa7
[]
\xa0\xa0
[]
'619d813\xa03697'
[]
4

2 に答える 2

2

line = "\xc2d bla"`"\xc2d" が 2 文字の部分文字列である Python 文字列です。

あなたのファイルには、そのパターンに一致しないリテラル文字列 "\xc2d" が含まれているように聞こえます。

リテラル文字列と一致させたい場合は、各文字を一致させる必要があります (つまり、スラッシュをエスケープします)。

pattern = r"\\xc2d" 
于 2012-07-27T20:30:43.070 に答える
1

Python では16 進エスケープ文字を表すため、変換f = open("myfile", "rb")を防ぐためにファイルをバイナリ モードで読み取る必要があります。\x\xhh

非バイナリ読み取りは失敗します -ここをチェックしてください。

于 2012-07-27T21:00:35.360 に答える