Python で文字列に数値が含まれていることを確認する方法
この記事では、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つの True
を iterable
に持つためです。
実施例
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)
関数は、指定された 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()
を使用すると、組み込みの文字列関数よりも高速に結果を生成できます。ですから、大きな値や文字列を扱う場合は、文字列関数よりも正規表現の方がはるかに最適です。