我正在尝试删除所有非数字字符的字符串,并且我已阅读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()]
答案 0 :(得分:1)
有些字符都是数字和字母:
>>> '㒃'.isalnum()
True
>>> '㒃'.isalpha()
True
>>> '㒃'.isnumeric()
True
>>> '㒃'.isalnum() and not '㒃'.isalpha()
False
请注意,您可以使用unicodedata.numeric
将该符号转换为数字:
>>> unicodedata.numeric('㒃')
2.0
isalnum
类的isalpha
和bytes
方法返回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 ...