2017-09-11 10 views
0

ドイツ語の任意の文字を削除/置換する必要があります(例:ü)。re.sub()はユニコードをどのように理解していますか?

import re 
re.sub(r'^\w{1}$', '', u'ü', re.U) 
> u'\xfc' 

上記のコードは動作しませんが、なぜならば:

re.Ure.UNICODE の\ W、\ bの、\のB、W \を作成し、 \ d、\ D、\ sおよび\ Sシーケンスは、Unicode文字プロパティデータベースに依存します。また、IGNORECASEに対して非ASCIIマッチングを有効にします。

+0

あなたは多分そのように国際文字を置き換えるべきではありません。 'unidecode'モジュールや' str.translate() 'のような優れた解決策があります。 – hop

答えて

1

re.sub()は、第4引数ではなく、第5引数としてflagsをとります。 4番目はcountです。これは動作します:

>>> re.sub(r'^\w$', '', u'ü', flags=re.U) 
u'' 
+0

@Novaterata:人間が摂取するためのものであれば、意味を変えたり破壊したりするのはなぜですか? 'unidecode'を使います。人間が消費するものでなければ、なぜそれをまったく交換する必要がありますか?特定の文字を1つだけ置き換えたい場合は、なぜ '.replace()'の代わりに 're.sub'を使うのですか?複数のものを置き換えたいのであれば、 '.translate()'の代わりに '.replace()'を繰り返し使うのはなぜですか?ほとんどの場合、正規表現よりも良い方法があります。それは文脈に依存しますが、OPは私たちに何も与えませんでした(どんな場合でも間違った軌道に乗っていました)。 – hop

+0

@Novaterata:質疑応答はそれほど十分ではありません。 – hop

+0

正直なところ、python2.7のドキュメントは、ドキュメント内で誤って使用されているため、常に混乱しているので、 'flags'ワードの使用を強調すべきです。 – minerals

関連する問題