isdecimal()、isdigit()、isnumeric() 的区别 -- Python




函数描述
isdecimal()是否为十进制数字符,包括 Unicode 数字、双字节全角数字,不包括罗马数字、汉字数字、小数。
isdigit()是否为数字字符,包括 Unicode 数字,单字节数字,双字节全角数字,不包括汉字数字,罗马数字、小数。
isnumeric()是否所有字符均为数值字符,包括 Unicode 数字、双字节全角数字、罗马数字、汉字数字,不包括小数。



案例


纯数字 (unicode(=半角数字))


def isnumber(s):
    print(s+' isdigit: ', s.isdigit())
    print(s+' isdecimal: ', s.isdecimal())
    print(s+' isnumeric: ', s.isnumeric())

isnumber('123')
123 isdigit:  True
123 isdecimal:  True
123 isnumeric:  True



带小数的数字字符串


isnumber('123.1')
123.1 isdigit:  False
123.1 isdecimal:  False
123.1 isnumeric:  False


我们传入一个带小数的数字字符串,最终三个函数都返回 False,即带小数的数字字符串使用这三个函数返回的结果是一致的。


大写中文数字字符串


isnumber('壹贰叁')
壹贰叁 isdigit:  False
壹贰叁 isdecimal:  False
壹贰叁 isnumeric:  True


我们传入一个大写中文数字字符串,最终只有 isnumeric() 返回了 True。


半角与全角数字(双字节)

0-9 对应 Unicode 编码范围:半角——’\u0030’ 到 ‘\u0039’ 全角——’\uff10’到’\uff19’

isnumber('\uff15')
5 isdigit:  True
5 isdecimal:  True
5 isnumeric:  True



bytes 数字


In [54]: num = b'6'

In [55]: num.isdigit()
Out[55]: True

In [56]: num.isnumeric()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-56-ea68d3c62431> in <module>
----> 1 num.isnumeric()

AttributeError: 'bytes' object has no attribute 'isnumeric'

In [57]: num.isdecimal()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-57-d8e1fd9dc8d6> in <module>
----> 1 num.isdecimal()

AttributeError: 'bytes' object has no attribute 'isdecimal'


阿拉伯数字


isnumber('Ⅱ')
Ⅱ isdigit:  False
Ⅱ isdecimal:  False
Ⅱ isnumeric:  True



汉字数字


isnumber('四')
四 isdigit:  False
四 isdecimal:  False
四 isnumeric:  True










reference

https://haicoder.net/python/python-string-isdecimal-isdigit-isnumeri.html#:~:text=Python%20isdecimal%20isdigit%20isnumeric%E5%8C%BA%E5%88%AB%E6%80%BB%E7%BB%93%20Python%20%E5%88%A4%E6%96%AD%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%98%AF%E5%90%A6%E6%98%AF%E6%95%B0%E5%AD%97%E4%B8%BB%E8%A6%81%E6%9C%89%E4%B8%89%E7%A7%8D%E6%96%B9%E6%B3%95%EF%BC%8C%E5%88%86%E5%88%AB%E4%B8%BA%20isnumeric%20%28%29,%E5%92%8C%20isdecimal%20%28%29%E3%80%82%20isdecimal%20%28%29%20%EF%BC%9A%E6%98%AF%E5%90%A6%E4%B8%BA%E5%8D%81%E8%BF%9B%E5%88%B6%E6%95%B0%E5%AD%97%E7%AC%A6%EF%BC%8C%E5%8C%85%E6%8B%AC%20Unicode%20%E6%95%B0%E5%AD%97%E3%80%81%E5%8F%8C%E5%AD%97%E8%8A%82%E5%85%A8%E8%A7%92%E6%95%B0%E5%AD%97%EF%BC%8C%E4%B8%8D%E5%8C%85%E6%8B%AC%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97%E3%80%81%E6%B1%89%E5%AD%97%E6%95%B0%E5%AD%97%E3%80%81%E5%B0%8F%E6%95%B0%E3%80%82