10

正規表現でドイツ語のウムラウトを照合できないことに驚いています。私はいくつかのアプローチを試みましたが、そのほとんどはロケールの設定に関係していましたが、今のところ役に立ちません。

locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
re.findall(r'\w+', 'abc def g\xfci jkl', re.L)
re.findall(r'\w+', 'abc def g\xc3\xbci jkl', re.L)
re.findall(r'\w+', 'abc def güi jkl', re.L)
re.findall(r'\w+', u'abc def güi jkl', re.L)

これらのバージョンのいずれも、ウムラウト-u (ü) と\w+. また、re.Lフラグを削除したり、パターン文字列にプレフィックスを付けたりu(ユニコードにするため)しても役に立ちませんでした。

何か案は?フラグはどのようにre.L正しく使用されていますか?

4

2 に答える 2

17

ドキュメントre.UNICODEに記載されているように、フラグを使用しようとしましたか?

>>> re.findall(r'\w+', 'abc def güi jkl', re.UNICODE)
['abc', 'def', 'g\xc3\xbci', 'jkl']

クイック検索は、いくつかの説明を提供するこのスレッドを指します。

re.LOCALE は、基になる C ライブラリに文字を渡すだけです。実際には、1 文字あたり 1 バイトのバイト文字列でのみ機能します。UTF-8 は ASCII 範囲外のコードポイントをコードポイントごとに複数バイトにエンコードし、re モジュールはそれらの各バイトを個別の文字として扱います。

于 2012-09-02T22:30:09.313 に答える