python isdigit()函数为非数字字符u'\u2466&x27;

python isdigit()函数为非数字字符u'\u2466&x27;,python,unicode,digit,Python,Unicode,Digit,我在处理python isdigit函数时遇到了一个奇怪的问题 例如: >>> a = u'\u2466' >>> a.isdigit() Out[1]: True >>> a.isnumeric() Out[2]: True 为什么这个字符是数字 有没有办法让这个报税表变成假的,谢谢 编辑,如果我不想把它当作一个数字,那么如何过滤掉它 例如,当我尝试将其转换为int时: >>> int(u'\u2466') 然后发生

我在处理python isdigit函数时遇到了一个奇怪的问题

例如:

>>> a = u'\u2466'
>>> a.isdigit()
Out[1]: True
>>> a.isnumeric()
Out[2]: True
为什么这个字符是数字

有没有办法让这个报税表变成假的,谢谢


编辑,如果我不想把它当作一个数字,那么如何过滤掉它

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

>>> int(u'\u2466')
然后发生了Unicodeincoder错误。

U+2466是(⑦), 是的,这是一个数字

如果您对数字的定义与的不同,则可能需要编写自己的
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'
[4]中的
s=u'abc 12434\u2466 5 def'

在[5]中:u''。连接(c表示s中的c,如果“0”字符是带圆圈的数字七,它是数字和数字

如果要将数字限制为通常的0-9,请使用正则表达式:

import re

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

如果要将某些内容转换为
int
,您需要的是而不是
isdigit

请注意,“十进制”不仅仅是0、1、2、…9,还有一些可以解释为十进制数字并转换为整数的数字。例如:

#coding=utf8

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

⑦ 是一个数字,至少Unicode consortium是这样认为的。如果您对“数字”有自己的理解,请随意分享。您希望将哪些值视为数字?如果您不同意
isdigit
处理Unicode的方式,只想查找阿拉伯数字,那么最好在“0123456789”中使用
If a
。或者只是
字符串中的数字。