指定した文字列が対象の文字列に含まれる位置を取得する(find, rfind, index, rindex)

広告
eyecatch

文字列で用意されているメソッドの中で、文字列の中に指定した文字列が含まれる位置を取得するのに使用できるメソッドの使い方について解説します。

指定した文字列が最初に現れるインデックスを取得する(findメソッド)

find メソッドは文字列の中で指定した文字列が最初に現れるインデックスを取得します。使い方は次の通りです。

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

引数に指定した文字列( sub )が文字列 str の中で最初に現れる位置をインデックスで返します。範囲を指定する start と end は省略可能です。こちらはあとで解説します。

簡単なサンプルで試してみます。

>>> "dictionary".find("io")
4
>>> "Good School".find("oo")
1
>>> "Goooood".find("oo")
1
>>> "Orange".find("aa")
-1
>>>

最初の例では "dictionary" の中で "io" という文字列が最初に現れるインデックスは 4 のために find メソッドは 4 を返します。

d i c t i o n a r y
0 1 2 3 4 5 6 7 8 9 

2番目の例では "Good School" の中で "oo" という文字列は 2 回現れますが、最初に現れるインデックスは 1 のために find メソッドは 1 を返します。

G o o d   S c h o o l
0 1 2 3 4 5 6 7 8 9 10

3番目の例では "Goooood" の中で "oo" という文字列は 4 回現れますが、最初に現れるインデックスは 1 のために find メソッドは 1 を返します。

G o o o o o d
0 1 2 3 4 5 6

4 番目の例のように指定した文字列が見つからなかった場合には -1 が返されます。

-- --

find メソッドでは 2 番目と 3 番目の引数を指定することで、指定した文字列を探す範囲を指定することができます。

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

対象の文字列( str )のインデックスが start から end の範囲内で引数に指定した文字列( sub )が最初に現れる位置をインデックスで返します。

簡単なサンプルで試してみます。

>>> "Good School".find("oo")
1
>>> "Good School".find("oo", 3, 10)
8
>>> "Good School".find("oo", 3)
8
>>>

2番目の例では "Good School" の中でインデックス 3 から 10 の間の範囲で "oo" という文字列が最初に現れるインデックスは 8 のために find メソッドは 8 を返します。

d   S c h o o l
3 4 5 6 7 8 9 10

なお 3 番目の例のように end を省略した場合は文字列の最後までが指定されたものとして扱われます。

指定した文字列が最初に現れるインデックスを取得する(indexメソッド)

index メソッドは find メソッドとほぼ同じ目的で使用されますが、引数に指定した文字列が見つからなかった場合に -1 ではなく ValueError エラーを返します。使い方は次の通りです。

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

簡単なサンプルで試してみます。

>>> "dictionary".index("io")
4
>>> "Good School".index("oo")
1
>>> "Good School".index("oo", 3)
8
>>> "Orange".index("aa")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
>>>

このように基本的な使い方は find メソッドと同じですが、見つからなかった場合にエラーが返される点に注意してください。

指定した文字列が最後に現れるインデックスを取得する(rfindメソッド)

rfind メソッドは文字列の中で指定した文字列が最後に現れるインデックスを取得します。使い方は次の通りです。

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

引数に指定した文字列( sub )が文字列 str の中で最後に現れる位置をインデックスで返します。範囲を指定する start と end は省略可能です。こちらはあとで解説します。

簡単なサンプルで試してみます。

>>> "dictionary".rfind("io")
4
>>> "Good School".rfind("oo")
8
>>> "Goooood".rfind("oo")
4
>>> "Orange".rfind("aa")
-1
>>>

最初の例では "dictionary" の中で "io" という文字列が最後に現れるインデックスは 4 のために rfind メソッドは 4 を返します。

d i c t i o n a r y
0 1 2 3 4 5 6 7 8 9 

2番目の例では "Good School" の中で "oo" という文字列は 2 回現れますが、最後に現れるインデックスは 8 のために rfind メソッドは 8 を返します。

G o o d   S c h o o l
0 1 2 3 4 5 6 7 8 9 10

3番目の例では "Goooood" の中で "oo" という文字列は 4 回現れますが、最後に現れるインデックスは 4 のために rfind メソッドは 4 を返します。

G o o o o o d
0 1 2 3 4 5 6

4 番目の例のように指定した文字列が見つからなかった場合には -1 が返されます。

-- --

rfind メソッドでは 2 番目と 3 番目の引数を指定することで、指定した文字列を探す範囲を指定することができます。

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

対象の文字列( str )のインデックスが start から end の範囲内で引数に指定した文字列( sub )が最初に現れる位置をインデックスで返します。

簡単なサンプルで試してみます。

>>> "Good School".rfind("oo")
8
>>> "Good School".rfind("oo", 0, 6)
1
>>> "Good School".rfind("oo", 3)
8
>>>

2番目の例では "Good School" の中でインデックス 0 から 6 の間の範囲で "oo" という文字列が最後に現れるインデックスは 1 のために rfind メソッドは 1 を返します。

G o o d   S c 
0 1 2 3 4 5 6 

なお 3 番目の例のように end を省略した場合は文字列の最後までが指定されたものとして扱われます。

指定した文字列が最後に現れるインデックスを取得する(rindexメソッド)

rindex メソッドは rfind メソッドとほぼ同じ目的で使用されますが、引数に指定した文字列が見つからなかった場合に -1 ではなく ValueError エラーを返します。使い方は次の通りです。

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

簡単なサンプルで試してみます。

>>> "dictionary".rindex("io")
4
>>> "Good School".rindex("oo")
8
>>> "Good School".rindex("oo", 0, 6)
1
>>> "Orange".rindex("aa")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
>>>

このように基本的な使い方は rfind メソッドと同じですが、見つからなかった場合にエラーが返される点に注意してください。

-- --

文字列で用意されているメソッドの中で、文字列の中に指定した文字列が含まれる位置を取得するのに使用できるメソッドの使い方について解説しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。