Python Alpha数字失败,但Alpha工作

时间:2016-07-08 19:11:17

标签: python string unicode

我正在尝试删除所有非数字字符的字符串,并且我已阅读Why isn't isnumeric working?,或者我必须拥有一个unicode字符串。但是,由于is.alnum()is.alpha()都不需要unicode并处理字符串,因此

之间存在差异(如果有的话)
"".join([a for a in foo if a.isalnum() and not a.isalpha()])

"".join([a for a in foo if a.isnumeric()]

1 个答案:

答案 0 :(得分:1)

有些字符都是数字和字母:

>>> '㒃'.isalnum()
True
>>> '㒃'.isalpha()
True
>>> '㒃'.isnumeric()
True
>>> '㒃'.isalnum() and not '㒃'.isalpha()
False

请注意,您可以使用unicodedata.numeric将该符号转换为数字:

>>> unicodedata.numeric('㒃')
2.0

isalnum类的isalphabytes方法返回ASCII字符的结果,但此时bytes缺少isnumeric方法只是unicode。请注意,如果您将自己限制为7位ASCII,则isdigit相当于isalnum() and not isalpha()

您可以通过简单的for循环找到所有差异:

>>> for i in range(0x110000):
...     c = chr(i)
...     num1 = c.isnumeric()
...     num2 = c.isalnum() and not c.isalpha()
...     if num1 ^ num2:
...         print('Difference:', c, '(', i, ')', num1, num2)
... 
Difference: 㐅 ( 13317 ) True False
Difference: 㒃 ( 13443 ) True False
Difference: 㠪 ( 14378 ) True False
Difference: 㭍 ( 15181 ) True False
Difference: 一 ( 19968 ) True False
Difference: 七 ( 19971 ) True False
Difference: 万 ( 19975 ) True False
Difference: 三 ( 19977 ) True False
Difference: 九 ( 20061 ) True False
Difference: 二 ( 20108 ) True False
# ... more ...