1

次のようにコンパイルされたパターンがあります

pattern_strings = ['\xc2d', '\xa0', '\xe7', '\xc3\ufffdd', '\xc2\xa0', '\xc3\xa7', '\xa0\xa0', '\xc2', '\xe9']
join_pattern = '|'.join(pattern_strings)
pattern = re.compile(join_pattern)

そして、ファイル内のパターンを次のように見つけます

def find_pattern(path):
    with open(path, 'r') as f:
        for line in f:
            print line
            found = pattern.search(line)
            if found:
                print dir(found)
                logging.info('found - ' + found)

pathファイル としての私の入力は

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

このプログラムを実行しても何も起こりません。

これらのパターンをキャッチできません。ここで何が間違っていますか?

目的の出力 - 各行にはいずれかの一致するパターンがあるため、各行

アップデート

正規表現をに変更した後

pattern_strings = ['\\xc2d', '\\xa0', '\\xe7', '\\xc3\\ufffdd', '\\xc2\\xa0', '\\xc3\\xa7', '\\xa0\\xa0', '\\xc2', '\\xe9']

それはまだ同じです、出力はありません

アップデート

正規表現を作成した後

pattern_strings = ['\\xc2d', '\\xa0', '\\xe7', '\\xc3\\ufffdd', '\\xc2\\xa0', '\\xc3\\xa7', '\\xa0\\xa0', '\\xc2', '\\xe9']
join_pattern = '[' + '|'.join(pattern_strings) + ']'
pattern = re.compile(join_pattern)

動き始めましたが、部分的にまだキャッチされていないパターンはライン用です

\xc2\xa0 
\xc3\xa7 
\xa0\xa0 

私のパターン文字列は['\\xc2\\xa0', '\\xc3\\xa7', '\\xa0\\xa0']

4

2 に答える 2

2

r"\xa0"withまたは asのいずれかで検索パターンの \ をエスケープします"\\xa0"

これを行う ....

 ['\\xc2d', '\\xa0', '\\xe7', '\\xc3\\ufffdd', '\\xc2\\xa0', '\\xc3\\xa7', '\\xa0\\xa0', '\\xc2', '\\xe9']

あなたが聞いた一人の男を除いて、みんながそうするように言っているように...

于 2012-07-27T18:24:12.640 に答える
0

あなたのファイルには実際に\xc2d--- つまり 5 文字 (バックスラッシュ、c、2、d の順) が含まれていますか? もしそうなら、あなたの正規表現はそれに一致しません。各正規表現は、特定の文字コードを持つ 1 つまたは 2 つの文字と一致します。文字列に一致させたい場合\xc2d、正規表現は\\xc2d.

于 2012-07-27T18:24:01.023 に答える