Pythonで文字列が数字かを判定する方法(isdecimal, isdigit, isnumeric)
Pythonで文字列が数字かどうかを判定するメソッドについて解説します。
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