文字列

【Python】文字列から特定の文字列を検索する方法 ~ find, rfind, index, rindex ~

【Python】文字列から特定の文字列を検索する方法 _ find, rfind, index, rindex _

Pythonで文字列から特定の文字列を検索する方法を解説します。

文字列から特定の文字列を検索する方法
find, rfind, index, rindex

文字列から特定の文字列を検索する場合には、strクラスのfind,rfindメソッドまたはindex,rindexメソッドを使用します。

それぞれのメソッドには返却値に違いがあります。以降で詳細を見ていく前に、以下ポイントを押さえておきましょう。

  • find, rfind:検索文字列が見つからなかった場合に-1を返却する。
  • index, rindex:検索文字列が見つからなかった場合に例外(ValueError)を返却する。

以降でfind, rfindメソッドを使用した文字列の検索例と、index, rindexを使用した文字列の検索例についてご紹介します。

特定の文字列が出現する文字位置を検索する(見つからない場合は-1を返却) ~find, rfind~

対象文字列の中で、特定文字列が出現する位置を検索するにはfind,rfindメソッドを使用します。

findは前方から、rfindは後方から文字列を検索し、指定した特定の文字列が一致した場所の文字位置を返却します。なお、特定の文字列が対象の文字列に含まれていなかった場合には、-1を返却します。

find, rfindメソッドは、以下のように使用します。

sample_text = 'Pythonプロジェクトを作ってPythonプログラミングを始めよう!'

# findで文字列を検索する
print('--- find')
print(sample_text.find('Python'))
print(sample_text.find('プログラミング'))
print(sample_text.find('JAVA'))

# rfindで文字列を検索する
print('--- rfind')
print(sample_text.rfind('Python'))
print(sample_text.rfind('プログラミング'))
print(sample_text.rfind('JAVA'))
【実行結果】
--- find
0
22
-1
--- rfind
16
22
-1

上記の例では、文字列の中に2つの'Python'という文字列があります。findメソッドを使用するか、rfindメソッドを使用するかで検索結果が異なっていることが分かるかと思います。

また、部分文字列の検索をする場合には、検索対象の文字列の後に、開始位置や終了位置を指定することもできます。

Note

findの公式ドキュメントの記載はこちらを参照してください。

rfindの公式ドキュメントの記載はこちらを参照してください。

特定の文字列が出現する文字位置を検索する(見つからない場合は例外を返却) ~index, rindex~

ある対象の文字列の中で、特定の文字列が出現する文字の位置を検索するもう一つの方法に、index,rindexメソッドがあります。

indexは前方から、rindexは後方から文字列を検索し、指定した特定の文字列が一致した場所の文字位置を返却します。なお、find, rfindメソッドでは、検索対象の文字列が対象の文字列に含まれない場合は-1を返却しましたが、index, rindexメソッドの場合は、ValueErrorの例外を返却します。

index, rindexメソッドは、以下のように使用します。

sample_text = 'Pythonプロジェクトを作ってPythonプログラミングを始めよう!'

# indexで文字列を検索する
print('--- index')
try:
    print(sample_text.index('Python'))
    print(sample_text.index('プログラミング'))
    print(sample_text.index('JAVA'))
except ValueError as ex:
    print(ex)

# rindexで文字列を検索する
print('--- rindex')
try:
    print(sample_text.rindex('Python'))
    print(sample_text.rindex('プログラミング'))
    print(sample_text.rindex('JAVA'))
except ValueError as ex:
    print(ex)
【実行結果】
--- index
0
22
substring not found
--- rindex
16
22
substring not found

使い方はfind, rfindメソッドとほとんど同じことが分かります。

違う点としては、指定の文字列が含まれていなかった場合には、ValueErrorの例外となるためtry~except構文を使って処理をしています。

Note

indexの公式ドキュメントの記載はこちらを参照してください。

rindexの公式ドキュメントの記載はこちらを参照してください。

find, rfindとindex, rindexの使い分け

Pythonで文字列を検索する方法としてfind, rfindメソッドとindex, rindexメソッドを使用する例をご紹介しました。find, rfindメソッドとindex, rindexメソッドはどういった考え方で使い分けたらよいでしょうか。

上記の使用例で見てきたように返却値に違いがあるため、以下のように覚えておくとよいでしょう。

  • 条件分岐(if)で処理したい場合:find, rfind
  • 例外処理(try~except)で処理したい場合:index, rindex

なお、文字列の中に対象文字列が含まれているかどうか判定したいという場合は、上記で説明してきたfind, rfind, index, rindexではなく、in演算子を利用するべきですので覚えておきましょう。