我遇到对付蟒蛇ISDIGIT功能一个奇怪的问题。
例如:
>>> a = u'\u2466'
>>> a.isdigit()
Out[1]: True
>>> a.isnumeric()
Out[2]: True
为什么这个字符是数字吗?
任何办法,使返回False代替,谢谢?
编辑,如果我不想把它当作一个数字,然后如何筛选出来?
例如,当我尝试将其转换为INT:
>>> int(u'\u2466')
然后UnicodeEncodeError
发生。
我遇到对付蟒蛇ISDIGIT功能一个奇怪的问题。
例如:
>>> a = u'\u2466'
>>> a.isdigit()
Out[1]: True
>>> a.isnumeric()
Out[2]: True
为什么这个字符是数字吗?
任何办法,使返回False代替,谢谢?
编辑,如果我不想把它当作一个数字,然后如何筛选出来?
例如,当我尝试将其转换为INT:
>>> int(u'\u2466')
然后UnicodeEncodeError
发生。
U + 2466是盘旋位7 (⑦),所以是的,这是一个数字。
如果您对什么是一个数字的定义不同于不同的Unicode协会 ,你可能需要编写自己的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'
如果你要转换的东西来int
,你需要isdecimal
而非isdigit
。
注意,“小数”不只是0,1,2,...如图9所示,有字符数 ,可以被解释为十进制数字,并转换为一个整数。 例:
#coding=utf8
s = u"1٢٣٤5"
print s.isdecimal() # True
print int(s) # 12345
性格为CIRCLED DIGIT SEVEN
,这是数字和一个数字。
如果你想将数字限制在通常的0-9,使用正则表达式:
import re
def myIsDigit(s):
return re.search("[^0-9]", s) is None