3

大文字の後に括弧が続くすべての一致を見つけようとしています。つまり、A)、B)、C)などです。再試行(http://re-try.appspot.com/)でテストしました。完全に機能しますが、プログラムに実装すると、次のエラーメッセージが表示されます。sre_constants.error:不均衡な括弧

parens = re.findall(r'[A-Z]\)', test_file)

エスケープ文字を無視しているようですが、なぜですか?任意のヘルプまたは代替アプローチをいただければ幸いです。

4

2 に答える 2

2

これは機能します:

>>> st='first A) you have B) and then C)'
>>> re.findall(r'[A-Z]\)',st)
['A)', 'B)', 'C)']

また:

>>> re.findall('[A-Z]\\)',st)
['A)', 'B)', 'C)']

本当にtest_file文字列ですか?あなたが持っているものはうまくいくはずです(Pythonシェルで試してみてください)ので、私の疑いはあなたの2番目のパラメーターre.findallです...

あなたの命名が示唆するように、それがファイルオブジェクトである場合、これを行う必要があります:

with open('file.txt','r') as f:
    for line in f:
        line_matches=re.findall(pattern,line)
        ... do something with a list of matches from that line
        ... next line

または、ファイル全体

with open('file.txt', 'r') as f:
    contents=f.read()
    file_matches=re.findall(pattern,contents,flags=re.MULTILINE)
    ... do something with a list of matches from the whole file

または、そのファイルのエンコーディングが間違っている可能性があります...

于 2012-12-25T05:50:03.153 に答える
0

正規表現は問題ありません。問題はtest_fileのエンコードにある可能性があります。

このPythonUnicode正規表現をチェックして、何か役立つかどうかを確認してください。

于 2012-12-25T06:04:09.960 に答える