1

次のような正規表現を使用して、文字列 (バイト文字列または Unicode 文字列) からいくつかの文字を削除したいと思います。

pattern = re.compile(ur'\u00AE|\u2122', re.UNICODE)

文字が Unicode リテラルとして指定されている場合、結果の正規表現はバイト文字列に対して適切に機能しません。

q = 'Canon\xc2\xae  EOS  7D'
pattern.sub('', q)  # 'Canon\xc2  EOS  7D'

ただし、置換の引数をユニコード文字列に変換すると、期待どおりに機能します...

pattern.sub('', unicode(q))  # u'Canon  EOS  7D'

誰かが私になぜこれが当てはまるのか説明してもらえますか?

ありがとう、

ピーター

4

1 に答える 1

2

標準 (バイト) 文字列は Unicode 文字列ではないためです。Python は、それがどのエンコーディングであるかを認識していないため (または、それが Unicode であるかどうかさえも!)、特定の Unicode 文字がその中の文字と一致するかどうかを判断する方法がありません。unicode()解決策は、あなたが理解したように、関数を使用してPythonにUnicodeであることを伝えることです。

于 2011-11-23T16:28:03.583 に答える