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

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

回答