Python で文字列に数字が含まれているかどうかをチェックする

Rayven Esplanada 2023年1月30日
  1. Python で文字列に数値が含まれているかどうかを調べるには any()isdigit() 関数を使用する
  2. Python で文字列に数字が含まれているかどうかを調べるには re.search() を使用する
Python で文字列に数字が含まれているかどうかをチェックする

このチュートリアルでは、Python で文字列に数字が含まれているかどうかをチェックする様々な方法を紹介します。

Python で文字列に数値が含まれているかどうかを調べるには any()isdigit() 関数を使用する

組み込みの関数 any() は反復可能文字列を受け取り、それらをブール値として読み込む。イテレートテーブル内の少なくとも一つの要素が True であることがわかれば、関数は True を返し、True の値が一つもなければ False を返します。

any() 関数を組み込みの文字列メソッド isdigit() と組み合わせて、文字列にそのサイズ内の数字が含まれているかどうかを確認し、Python で文字列に数値が含まれている場合は True を返すことができます。

例えば、2つの文字列変数を宣言してみましょう。その後、文字列に数字が含まれているかどうかを調べる関数を宣言します。

string1 = "String Number One"
string2 = "String Number 2"


def hasNumber(stringVal):
    return any(elem.isdigit() for elem in stringVal)


print(string1, "has number:", hasNumber(string1))
print(string2, "has number:", hasNumber(string2))

さらにコードを短くするために、同じ 2つの関数を含むラムダ関数を宣言して、文字列をチェックします。

string1 = "String Number One"
string2 = "String Number 2"


def hasNumber(stringVal):
    return any(elem.isdigit() for elem in stringVal)


print(string1, "has number:", hasNumber(string1))
print(string2, "has number:", hasNumber(string2))

出力:

String Number One has number: False
String Number 2 has number: True

Python で文字列に数字が含まれているかどうかを調べるには re.search() を使用する

Python はモジュール re を使って正規表現を操作する操作をサポートしています。与えられた文字列の中に数値が含まれているかどうかを調べるには、関数 re.search() を用いることができます。

1つ目は正規表現であり、2つ目は式にマッチするかどうかを調べる文字列です。

任意の数字にマッチする式は \d[0-9] のいずれかです。この例では、search() の最初のパラメータとして \d を使用することにします。

import re

string1 = "Number One Two Three"
string2 = "Number 123"


def hasNumber(stringVal):
    if re.search("\d", stringVal) == None:
        return False
    else:
        return True


print(string1, "contains number:", hasNumber(string1))
print(string2, "contains number:", hasNumber(string2))

この関数は、ラムダ宣言と三項演算子を用いて、以下のように一行に短縮できます。

def hasNumber(stringVal):
    return False if re.search("\d", stringVal) == None else True

出力:

Number One Two Three contains number: False
Number 123 contains number: True

実行時間の点では、正規表現の評価は組み込みの文字列関数を使用するよりもはるかに高速です。文字列の値がかなり大きい場合は、文字列関数を使用するよりも re.search() の方が最適です。

また、与えられた文字列に対して search() 関数を実行する前に re.compile() を用いて式をコンパイルすると、実行時間をさらに短縮できます。

compile() の戻り値を変数にキャッチし、その変数内で search() 関数を呼び出す。この場合、search() は単一のパラメータ、つまりコンパイルされた式を検索するための文字列だけを必要とします。

def hasNumber(stringVal):
    re_numbers = re.compile("\d")
    return False if (re_numbers.search(stringVal) == None) else True

要約すると、組み込み関数 any()isdigit() を併用することで、文字列に数値が含まれているかどうかを調べることができます。

しかし、正規表現モジュール re の中でユーティリティ関数 search()compile() を使用すると、組み込みの文字列関数よりも高速に結果を生成できます。ですから、大きな値や文字列を扱う場合は、文字列関数よりも正規表現の方がはるかに最適です。

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

関連記事 - Python String