【Python】文字列から指定した文字の位置を取得(含まれるかの確認):find()、index()

2022.03.27 /

【Python】文字列から指定した文字の位置を取得(含まれるかの確認):find()、index()

本記事ではPythonで特定の文字列から指定した文字が含まれるかの確認、およびその位置を取得する方法について解説していきます。

Pythonでプログラムを作成していると、特定の文字列に任意の文字列が含まれるか判定したい場面がでてきます。
また任意の文字列が含まれる場合、どの位置にあるのかも必要になることも多いです。

このような場面で使用される、find()メソッドやindex()メソッドの使用方法について、ここでは詳しく解説していきます。

find()メソッド

find()とは

find()メソッドは特定の文字列から指定した文字列を検索するメソッドです。

文字列の中にfind()で指定した文字列が含まれている場合、その文字列が最初に現れるインデックスを返します。もし指定した文字列が存在しなかった場合は-1を返します。

注意

インデックスは0から始まります。そのためfind()によるアウトプットが2の場合は3文字目を意味します

find()の構文は次のようになります。

構文

str.find(sub[, start[, end]] )

文字列strから検索したい文字列subが含まれるか、どの位置にあるかを判定できます。
startとendは省略可能であり、指定することで検索するインデックスの範囲を指定できます。

気を付けたい点として、検索対象の文字列に検索したい文字列が複数含まれている場合でも、最初に現れる文字列の位置が返されるということです。

find()メソッドの特徴
  • 指定した文字列が存在した場合、最初に現れた位置のインデックスを返す
  • 指定した文字列が存在しなかった場合、-1を返す
  • 指定した文字列が複数存在していても、最初の位置のみが返される

文字列から指定した文字列の位置を取得する

上記で解説したfind()メソッドの使い方をふまえて、特定の文字列から指定した文字列の位置を取得する例を以下に記します。

message = 'Python is a great programming language'

# greatの位置を確認
print(message.find('great'))

# Output: 12

上記のようにしてfind()メソッドでは文字列の位置を取得します。

指定した文字列が含まれるかの判定

find()メソッドで返される値が-1の場合、指定した文字列が検索対象の文字列には含まれないことを意味します。

これを踏まえて、指定した文字列が含まれるかの判定は次のように表すことができます。

message = 'Python is a great programming language'
if (message.find('great') != -1):
    # 指定した文字列が含まれている場合の処理
else:
    # 指定した文字列が含まれいない場合の処理

上記のように-1とif文を利用することで含まれているときとそうでない時の処理を分けることができます。

rfind()メソッド

rfind()とは

rfind()メソッドはfind()メソッドと同じ構文で使用します。find()メソッドとの違いとしては、文字列の後ろ(右側)から文字列の検索を行うことです。

構文

str.rfind(sub[, start[, end]] )

文字列の末尾から検索を行いたい場合はrfind()メソッドを利用しましょう。

rfind()メソッドの利用

以下にrfind()メソッドを使用したコード例を記します。

message = 'Python is a great programming language'
print(message.find('a'))
print(message.rfind('a'))
# 10
# 35

上記のようにfind()とは異なった結果となります。

index()メソッド

index()メソッドとは

特定の文字列から指定した文字列の位置を取得するメソッドは、find()メソッドのほかにindex()メソッドがあります。

index()メソッドはfind()メソッドと同じように使用します。

構文

str.find(sub[, start[, end]] )

しかしfind()メソッドとの大きな違いとして文字列が見つからなかった場合はValueErrorが発生することです。

message = 'Python is a great programming language'
print(message.index('office'))
# ValueError: substring not found

ValueErrorが発生するとプログラムの処理が止まってしまいますので、例外処理などを施しておく必要があります。

例外処理については以下記事をご参照ください。

文字列から指定した文字列の位置を取得する

すでに解説しているfind()メソッドと同じ使い方ですが、特定の文字列から指定した文字列の位置を取得する例を以下に記します。

message = 'Python is a great programming language'

# greatの位置を確認
print(message.index('great'))

# Output: 12

上記のようにしてindex()メソッドでは文字列の位置を取得します。

指定した文字列が含まれるかの判定

指定した文字列が検索対象に含まれない場合、index()メソッドではValueErrorが発生してしまいます。

そのため以下のように例外処理を組み込むことをお勧めします。

message = 'Python is a great programming language'
try:
    print(message.index('office'))
except Exception as e:
    print("指定した文字列は含まれませんでした")

in演算子

in演算子とは

in演算子を利用することで検索したい文字列が検索対象の文字列の中に存在するか判定することができます。

構文

検索したい文字列 in 検索対象の文字列

in演算子で返される値はTrueまたはFalseです。

find()やindex()のようにどの位置に文字列があるかまではわかりませんので、存在するかの判定のみで利用します。

指定した文字列を含むかの判定

in演算子では以下コード例のように、if文による判定で簡単に含む場合と含まない場合の処理の判定ができます。

message = 'Python is a great programming language'
if 'is' in message:
    print('存在します')
else:
    print("指定した文字列は含まれませんでした")

Pythonによる文字列操作

Pythonでプログラムを組んでいると様々な文字列操作を行います。Pythonにおける文字列操作の参考に以下記事を読んでみてください。

まとめ

本記事「【Python】文字列から指定した文字の位置を取得(含まれるかの確認):find()、index()」はいかがでしたか。

find()やindex()などのメソッドをご紹介してきましたが、私は基本的にfind()を利用することが多いです。

ここで解説した方法を応用することで、様々なことが可能になります。ぜひいろいろなことにチャレンジしてみてください。