文字列を検索しよう
文字列の中から特定の文字や部分文字列を探す方法を学びます。位置の検索、出現回数のカウント、先頭・末尾の判定など、文字列データを効率的に処理するためのメソッドを習得します。
in 演算子で存在を確認する
文字列の中に特定の部分文字列が含まれているかを確認するには、in 演算子を使います。
text = "Hello, Python!" print("Python" in text) # => True print("Java" in text) # => False
in 演算子は、部分文字列が見つかれば True、見つからなければ False を返します。
not in を使うと、含まれていないことを確認できます。
text = "Hello, Python!" print("Java" not in text) # => True
.find() メソッドで位置を検索する
部分文字列がどこにあるかを知りたい場合は、.find() メソッドを使います。
text = "Hello, Python!" print(text.find("Python")) # => 7 print(text.find("o")) # => 4
.find() メソッドは、部分文字列が最初に見つかった位置(インデックス)を返します。見つからない場合は -1 を返します。
text = "Hello, Python!" print(text.find("Java")) # => -1
検索範囲を指定する
.find() メソッドには、検索範囲を指定するオプション引数があります。
text = "banana" # 012345 print(text.find("a")) # => 1(最初の "a" の位置) print(text.find("a", 2)) # => 3(インデックス 2 以降で検索) print(text.find("a", 4)) # => 5(インデックス 4 以降で検索)
第2引数で開始位置、第3引数で終了位置を指定できます。
text = "banana" # 012345 print(text.find("a", 2, 4)) # => 3(インデックス 2〜3 の範囲で検索) print(text.find("a", 4, 5)) # => -1(インデックス 4 の範囲には "a" がない)
.index() メソッドとの違い
.index() メソッドも .find() と同様に部分文字列の位置を検索しますが、見つからない場合にエラー(ValueError)を発生させる点が異なります。
text = "Hello, Python!" print(text.index("Python")) # => 7
見つからない場合はエラーになります。
text = "Hello, Python!" print(text.index("Java")) # => ValueError: substring not found
.find() と .index() の使い分け:
- 見つからない可能性がある場合は
.find()を使い、戻り値が-1かどうかで判定する - 必ず見つかるはずの場面では
.index()を使い、見つからなければエラーにする
.count() メソッドで出現回数を数える
部分文字列が何回出現するかを数えるには、.count() メソッドを使います。
text = "banana" print(text.count("a")) # => 3 print(text.count("na")) # => 2 print(text.count("x")) # => 0
.count() メソッドは、重複しない出現回数をカウントします。
text = "aaa" print(text.count("aa")) # => 1(重複しないため、2 ではなく 1)
.find() と同様に、検索範囲を指定することもできます。
text = "banana" # 012345 print(text.count("a", 2)) # => 2(インデックス 2 以降でカウント) print(text.count("a", 2, 4)) # => 1(インデックス 2〜3 の範囲でカウント)
.startswith() で先頭を判定する
文字列が特定の文字列で始まるかを判定するには、.startswith() メソッドを使います。
text = "Hello" print(text.startswith("He")) # => True print(text.startswith("lo")) # => False
.endswith() で末尾を判定する
文字列が特定の文字列で終わるかを判定するには、.endswith() メソッドを使います。
text = "Hello" print(text.endswith("lo")) # => True print(text.endswith("He")) # => False
まとめ
in演算子で部分文字列の存在を確認できる.find()メソッドは部分文字列の位置を返し、見つからなければ-1を返す.index()メソッドは.find()と似ているが、見つからなければエラーを発生させる.count()メソッドで部分文字列の出現回数を数えられる.startswith()と.endswith()で先頭・末尾の判定ができる
演習に挑戦