Python で文字列に数値が含まれていることを確認する方法

  1. Python の any 関数と str.isdigit を使用して、文字列に数値が含まれているかどうかを確認する
  2. re.search(r'\d') は、文字列に数値が含まれているかどうかを確認する

この記事では、Python 文字列に数値が含まれているかどうかを確認する方法を紹介します。

Python 組み込みの any 関数str.isdigit を組み合わせると、指定された文字列に数値が含まれている場合に True が返されますそれ以外の場合は、False を返します。

パターン r'\d' を持つ Python 正規表現検索メソッドは、指定された文字列に数値が含まれている場合、True を返すこともできます。

Python の any 関数と str.isdigit を使用して、文字列に数値が含まれているかどうかを確認する

any 関数は、指定された iterable のいずれかの要素が True である場合は True を返し、それ以外の場合は False を返します。

str.isdigit() は、指定された文字列のすべての文字が数字の場合は True を返し、それ以外の場合は False を返します。

any(chr.isdigit() for chr in stringExample)

stringExample に少なくとも数値が含まれている場合、上記のコードは True を返します。これは、chr.isdigit()for chr in stringExample が少なくとも 1つの Trueiterable に持つためです。

実施例

str1 = "python1"
str2 = "nonumber"
str3 = "12345"

print(any(chr.isdigit() for chr in str1))
print(any(chr.isdigit() for chr in str2))
print(any(chr.isdigit() for chr in str3))

出力:

True
False
True

map() 関数

Python map(function,iterable) fuctionは、指定された iterable のすべての要素に function を適用し、イテレータを返します上記の結果が得られます。

したがって、上記のソリューションを次のように書き直すことができます。

any(map(str.isdigit, stringExample))

実施例

str1 = "python1"
str2 = "nonumber"
str3 = "12345"

print(any(map(str.isdigit, str1)))
print(any(map(str.isdigit, str2)))
print(any(map(str.isdigit, str3)))

出力:

True
False
True

re.search(r'\d') は、文字列に数値が含まれているかどうかを確認する

re.search(r'\d', string) は、string をスキャンして、一致オブジェクトを返します指定されたパターンに一致する最初の場所-\d は 0 から 9 までの任意の数を意味し、一致が見つからない場合は None を返します。

import re

print(re.search(r'\d', "python3.8"))
#output: <re.Match object; span=(6, 7), match='3'>

match オブジェクトには、match の開始位置と終了位置を示す 2 タプルの span と、match = '3'のような一致したコンテンツが含まれます。

bool() 関数は、re.search の結果を match object または None から True または False にキャストできます。

実施例

import re

str1 = "python12"
str2 = "nonumber"
str3 = "12345"

print(bool(re.search(r'\d', str1)))
print(bool(re.search(r'\d', str2)))
print(bool(re.search(r'\d', str3)))

出力:

True
False
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() を使用すると、組み込みの文字列関数よりも高速に結果を生成できます。ですから、大きな値や文字列を扱う場合は、文字列関数よりも正規表現の方がはるかに最適です。

関連記事 - Python String

  • Python で文字列をダブルに変換する
  • Python でファイル内の文字列を検索する