对于非数字字符U蟒蛇ISDIGIT()函数返回true“\\ u2466”(python isdig

2019-06-24 11:11发布

我遇到对付蟒蛇ISDIGIT功能一个奇怪的问题。

例如:

>>> a = u'\u2466'
>>> a.isdigit()
Out[1]: True
>>> a.isnumeric()
Out[2]: True

为什么这个字符是数字吗?

任何办法,使返回False代替,谢谢?


编辑,如果我不想把它当作一个数字,然后如何筛选出来?

例如,当我尝试将其转换为INT:

>>> int(u'\u2466')

然后UnicodeEncodeError发生。

Answer 1:

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'


Answer 2:

如果你要转换的东西来int ,你需要isdecimal而非isdigit

注意,“小数”不只是0,1,2,...如图9所示,有字符数 ,可以被解释为十进制数字,并转换为一个整数。 例:

#coding=utf8

s = u"1٢٣٤5"
print s.isdecimal() # True
print int(s) # 12345


Answer 3:

性格为CIRCLED DIGIT SEVEN ,这是数字和一个数字。

如果你想将数字限制在通常的0-9,使用正则表达式:

import re

def myIsDigit(s):
  return re.search("[^0-9]", s) is None


文章来源: python isdigit() function return true for non digit character u'\\u2466'