0

Python 3.3 では、正規表現内で Unicode コードポイントの範囲を問題なく使用できます。

>>> import re
>>> to_delete = '[\u0020-\u0090\ufb00-\uffff]'
>>> s = 'abcdABCD¯˘¸ðﺉ﹅ffl你我他'
>>> print(s)
abcdABCD¯˘¸ðﺉ﹅ffl你我他
>>> print(re.sub(to_delete, '', s))
¯˘¸ð你我他

すっきりとシンプルです。しかし、16 進数 5 桁のコードポイントを含めると、つまりのように、16 進数 4 桁で始まる範囲の一部\uffffとしてよりも大きいものを含めると、エラーが発生します。\u1047f

>>> to_delete = '[\u0020-\u0090\ufb00-\u1047f]'
>>> print(re.sub(to_delete, '', s))
...
sre_constants.error: bad character range

新しい 5 桁の範囲を開始してもエラーは発生しませんが、期待される動作も得られません。

>>> to_delete = '[\u0020-\u0090\ufb00-\uffff\u10000-\u1047f]'
>>> print(re.sub(to_delete, '', s))
你我他

(記号はそれぞれコードポイント\u10000\u10308、および\u10192であり、最後の操作で置き換えられているはずre.subです。)


受け入れられた回答の指示に従ってください:

>>> to_delete = '[\u0020-\u0090\ufb00-\uffff\U00010000-\U0001047F]'
>>> print(re.sub(to_delete, '', s))
¯˘¸ð你我他

完全。極端に醜いですが、完璧です。

4

1 に答える 1

3

\u16 ビット コードポイントのみをサポートします。32 ビット版を使用する必要があります\U。8 桁が必要なので、先頭に 0 をいくつか追加する必要があることに注意してください (例: \U00010D2B)。

ソース: http://docs.python.org/3/howto/unicode.html#unicode-literals-in-python-source-code

于 2013-05-20T20:06:42.363 に答える