[Python] 文字列が数字であることを判別する(isdigit, isdecimal, isnumeric)

Python 文字列 組込み型

文字列が数値であるかどうかを判別する方法は、

  • int()を使って確認する方法
  • 文字列のメソッド(isdigit, isdecimal, isnumeric)を使う方法

の2つが考えられます。どちらも標準の組み込み関数を使うものですが、後者のほうが簡単なコードで実現できます。本記事では、具体例を交えてこれらの使い方を記載すると共に、文字列メソッドそれぞれの違いについてもまとめます。
尚、小数点はピリオド(.)があるため、数値とは見なされないことに注意が必要です。

#2019/4/7 記事更新

確認した環境

  • OS: Ubuntu 16.04LTS
  • Python: ver3.7.2@Anaconda

int()による判別方法の例

int()に渡した文字列が数値でない場合にValueErrorとなることを利用した例です。

def is_int(s):
    try:
        int(s)
        return True
    except ValueError:
        return False

実行結果を以下に示します。

>>> is_int('1')
True
>>> is_int('100')
True
>>> is_int('a')
False
>>> is_int('1.2')
False
>>> is_int('1p2')
False

文字列メソッドによる判別

文字列が「10進数字」「数字」「数」かどうかを判別するメソッドを下記に3つ示します。

文字列メソッド判別する数値の内容備考
isdecimal()「10進数字」かどうか0~9の数値以外に、
U+0660 "٠"(ARABIC-INDIC DIGIT ZERO)等も含む
isdigit()「数字かどうか」10進数+特殊数字
(例:U+9312 '①', カローシュティー数字
isnumeric()「数」かどうか数字+Unicode の数値プロパティを持つ全ての文字
(例:U+2155 "⅕"等)

これらのメソッドは、文字列が数値の場合はTrueを、そうでなければFalseを返します。
尚、小数は”.”(ピリオド)が数値ではないため、Falseが返却されます

いろいろな文字列を例にして、それぞれのメソッドの判定結果を調べてみます。

整数値の場合

# この場合は全てTure
>>> '1234'.isdecimal()
True

>>> '1234'.isdigit()
True

>>> '1234'.isnumeric()
True

英数字混在の場合

# この場合は全てFalse
>>> '1b34'.isdecimal()
False

>>> '1b34'.isdigit()
False

>>> '1b34'.isnumeric()
False

小数の場合

# 小数はピリオドが数字ではないためFalse
>>> '1.234'.isdecimal()
False

>>> '1.234'.isdigit()
False

>>> '1.234'.isnumeric()
False

全角数字の場合

# 全角数字も全てTrue
>>> '1'.isdecimal()
True

>>> '1'.isdigit()
True

>>> '1'.isnumeric()
True

特殊文字(例えば ‘①’:U+9312)の場合

# この特殊文字はdigit型
>>> '①'.isdecimal()
False

>>> '①'.isdigit()  
True

>>> '①'.isnumeric() 
True

特殊文字(漢数字)の場合

# 漢数字はnumeric型に属するようです
>>> '五'.isdecimal()
False

>>> '五'.isdigit()
False

>>> '五'.isnumeric()
True

特殊文字(例えば ‘⅕’:U+2155)の場合

# この特殊文字はnumeric型
>>> '⅕'.isdecimal()
False

>>> '⅕'.isdigit()
False

>>> '⅕'.isnumeric()
True

尚、どの文字がdecimalか、digitかは、こちらのサイト様が参考になります。

まとめ

今回は、文字列が数値かどうかを判別する方法についてまとめました。

  • isdecimal():10進数字
  • isdigit() :数字(10進数字+特殊数字)
  • isnumeric():数 (数字+特殊数字)

Learn more...

書籍でもう少し詳しく学びたい場合はこちらもどうぞ。筆者もかなり参考にさせてもらっています!

シェアする
ひびきをフォローする
Hbk project