2013-05-20 86 views
0

指定高Unicode代碼點在Python 3.3我用正則表達式中的Unicode代碼點的範圍不麻煩:正則表達式 - 在Python

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

它的清潔和簡單。但是,如果我有五個十六進制數字碼點,也就是什麼比\uffff高,如\u1047f,作爲一個範圍開頭四個十六進制數字的一部分,我得到一個錯誤:

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

沒有錯誤如果我開始一個新的五位數的範圍,但我也沒有得到預期的行爲:

>>> 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)) 
¯˘¸ð你我他 

完美。傲慢的極端,但完美。

回答