10

私はpythonisdigit関数を扱う奇妙な問題に遭遇します。

例えば:

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

なぜこの文字は数字なのですか?

代わりに、これをFalseに戻す方法はありますか?


編集、それを数字として扱いたくない場合、それを除外する方法は?

たとえば、それをintに変換しようとすると:

>>> int(u'\u2466')

それからUnicodeEncodeError起こった。

4

3 に答える 3

23

U+2466はCIRCLEDDIGITSEVEN(✧)なので、そうです、数字です。

数字とは何かの定義がユニコードコンソーシアムisdigit()の定義と異なる場合は、独自のメソッドを作成する必要があるかもしれません。

編集、それを数字として扱いたくない場合、それを除外する方法は?

ASCII数字だけに興味がある場合は、次のようにすることができます09

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'
于 2012-05-15T15:33:56.247 に答える
9

何かを に変換するint場合isdecimalは、isdigit.

「10 進数」は 0、1、2、... 9 だけでなく、10 進数として解釈して整数に変換できる文字数があることに注意してください。例:

#coding=utf8

s = u"1٢٣٤5"
print s.isdecimal() # True
print int(s) # 12345
于 2012-05-15T15:41:49.560 に答える
4

文字は でCIRCLED DIGIT SEVEN、数字と数字です。

数字を通常の 0 ~ 9 に制限する場合は、正規表現を使用します。

import re

def myIsDigit(s):
  return re.search("[^0-9]", s) is None
于 2012-05-15T15:34:42.953 に答える