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))
¯˘¸ð你我他
完美。傲慢的極端,但完美。