このガイドでは、Pythonで文字列に部分文字列が含まれているかどうかを確認する方法を紹介します。
いつものように、私たちがカバーする各アプローチは異なる長所と短所を持っています。
in演算子
Python の文字列が部分文字列を含んでいるかどうかを確認する最も簡単な方法は、 in
演算子を使うことです。
in演算子は Python でデータ構造のメンバーシップをチェックするために使用されます。
この演算子はブール値を返します (Trueまたは
Falseのどちらか)。
Pythonでin` 演算子を使用して文字列が部分文字列を含むかどうかを確認するには、単純にスーパー文字列に対してこの演算子を呼び出します。
fullstring = "StackAbuse"
substring = "tack"
if substring in fullstring:
print("Found!")
else:
print("Not found!")
この演算子はオブジェクトの __contains__
メソッドを呼び出すための省略記法であり、あるアイテムがリストに存在するかどうかをチェックするのにも有効です。
もし、 fullstring
が None
を指していたら、例外がスローされるでしょう。
TypeError: argument of type 'NoneType' is not iterable
これを避けるには、まず None
を指しているかどうかを確認します。
fullstring = None
substring = "tack"
if fullstring != None and substring in fullstring:
print("Found!")
else:
print("Not found!")
String.index() メソッド
Python の String 型には index()
というメソッドがあり、文字列の中で最初に現れる部分文字列の開始インデックスを見つけるために使用することができます。
部分文字列が見つからない場合、 ValueError
例外がスローされます。
これは try-except-else ブロックで処理できます。
fullstring = "StackAbuse"
substring = "tack"
try:
fullstring.index(substring)
except ValueError:
print("Not found!")
else:
print("Found!")
このメソッドは、文字列全体の中での部分文字列の存在だけでなく、その位置を知る必要がある場合に便利です。
String.find() メソッド
String 型には find
というメソッドもあります。
これは index()
よりも便利で、例外処理の心配をする必要がないからです。
もし find()
がマッチしない場合は -1 を返し、そうでない場合は大きな文字列の中の部分文字列の左端のインデックスを返します。
fullstring = "StackAbuse"
substring = "tack"
if fullstring.find(substring) != -1:
print("Found!")
else:
print("Not found!")
もし、エラーキャッチの必要性を回避したいのであれば、このメソッドは index()
よりも優先されるべきでしょう。
正規表現(RegEx)
正規表現は、文字列のパターンマッチをチェックするための、より柔軟な (より複雑ではありますが) 方法を提供します。
Python には re
という正規表現用のビルトインモジュールが同梱されています。
このモジュールは search()
という関数を含んでおり、この関数を使って部分文字列のパターンにマッチさせることができます。
from re import search
fullstring = "StackAbuse"
substring = "tack"
if search(substring, fullstring):
print "Found!"
else:
print "Not found!"
この方法は、大文字小文字を区別しないマッチングのような、より複雑なマッチング機能を必要とする場合に適しています。
そうでなければ、複雑でスピードの遅い正規表現は、単純な部分文字列マッチングのユースケースでは避けるべきでしょう。
著者について
この記事は、コードを通じて人々の生活を向上させることに情熱を注ぐソフトウェアコンサルタント兼開発者、Jacob Stopakによって書かれました。
Jacob は Initial Commit という、好奇心旺盛な開発者が自分の好きなプログラムがどのようにコーディングされているかを学ぶためのサイトの作者です。
その注目すべきプロジェクトは、コードレベルで Git を学ぶことを支援します。