我遇到了一个处理python isdigit函数的奇怪问题。
例如:
>>> a = u'\u2466'
>>> a.isdigit()
Out[1]: True
>>> a.isnumeric()
Out[2]: True
为什么这个字符是数字?
任何使这个返回False的方法,谢谢?
编辑,如果我不想将其视为数字,那么如何将其过滤掉?
例如,当我尝试将其转换为int:
时>>> int(u'\u2466')
然后UnicodeEncodeError
发生了。
答案 0 :(得分:22)
U + 2466是CIRCLED DIGIT SEVEN(⑦),所以是的,它是一个数字。
如果您对数字的定义与Unicode Consortium的定义不同,则可能需要编写自己的isdigit()
方法。
编辑,如果我不想将其视为数字,那么如何将其过滤掉?
如果您只对ASCII数字0
... 9
感兴趣,可以执行以下操作:
In [4]: s = u'abc 12434 \u2466 5 def'
In [5]: u''.join(c for c in s if '0' <= c <= '9')
Out[5]: u'124345'
答案 1 :(得分:8)
如果您要将某些内容转换为int
,则需要isdecimal
而不是isdigit
。
注意&#34;十进制&#34;不只是0,1,2,... 9,有number of characters可以解释为十进制数字并转换为整数。例如:
#coding=utf8
s = u"1٢٣٤5"
print s.isdecimal() # True
print int(s) # 12345
答案 2 :(得分:3)
字符是CIRCLED DIGIT SEVEN
,它是数字和数字。
如果要将数字限制为通常的0-9,请使用正则表达式:
import re
def myIsDigit(s):
return re.search("[^0-9]", s) is None