Pythonで文字列が数字かを判定する方法(isdecimal, isdigit, isnumeric)

Pythonで文字列が数字かどうかを判定するメソッドについて解説します。

Pythonで文字列が数字かを判定する方法(isdecimal, isdigit, isnumeric)

Pythonのstr型には、文字列の中身が数字に変換できるかどうかを判定する方法として、以下のメソッドが用意されています。

  • str.isdecimal(): 十進数かを判定(いわゆる通常の数字の判定)
  • str.isdigit(): 数字かを判定(累乗表記などの特殊数字含む)
  • str.isnumeric(): 数字を表す文字かを判定(漢数字やローマ数字含む)

それぞれ、数字と判定する範囲が異なるので、用途に合わせて使い分けましょう。

isdecimal():文字列が十進数かを判定する

文字列str型のisdecimal()メソッドは、文字列中のすべての文字が十進数かつ1文字以上ならTrue、そうでなければFalseを返します。正確には、Unicodeの一般カテゴリNdに含まれる文字を十進数と判定します。

-などの記号や、小数点の.が含まれるとFalse判定となるため、注意が必要です。

# 文字列が十進数かを判定する

s1 = "100"
print(s1.isdecimal())
# True

# -や.を含むとFalse判定になる
s2 = "-100"
print(s2.isdecimal())
# False


s3 = "100.0"
print(s3.isdecimal())
# False

一般的に人間が普段使いする数字(十進数)であるかどうかを判定するには、このisdecimal()メソッドを使うと良いでしょう。

isdigit():文字列が数字かを判定する

文字列str型のisdigit()メソッドは、文字列中のすべての文字が数字かつ1文字以上ならTrue、そうでなければFalseを返します。

isdecimal()メソッドとの違いは、上付き数字などの特殊数字も含めて数字と判定することができる点です。例えば、isdigit()メソッドは10²といった表現も数字として判定します。

また、isdigit()メソッドも-.が含まれるとFalse判定となります。

# 文字列が数字かを判定する

s1 = "100"
print(s1.isdigit())
# True


# -や.を含むとFalse判定になる
s2 = "-100"
print(s2.isdigit())
# False


# 特殊数字も数字と判定する
s3 = "10²"
print(s3.isdigit())
# True

print(s3.isdecimal()) # isdecimalではFalse
# False

s4 = "③"
print(s4.isdigit())
# True

print(s4.isdecimal()) 
# False

isnumeric():文字列が数を表す文字かを判定する

文字列str型のisnumeric()メソッドは、文字列中のすべての文字が数を表す文字かつ1文字以上ならTrue、そうでなければFalseを返します。

数を表す文字とは、数字や漢数字、分数、ローマ数字なども含みます。isnumeric()メソッドも-.が含まれるとFalse判定となります。

# 文字列が数を表す文字かを判定する

s1 = "100"
print(s1.isnumeric())
# True


# -や.を含むとFalse判定になる
s2 = "-100"
print(s2.isnumeric())
# False


# 漢数字や分数、ローマ数字も数字と判定する
s3 = "五"
print(s3.isnumeric())
# True

s4 = "¾"
print(s4.isnumeric())
# True

s5 = "Ⅶ"
print(s5.isnumeric()) 
# True