【Python】文字列の検索index・rindexメソッド

Pythonにおける文字列の検索のindexとrindexメソッドについて紹介します。



文字列検索indexメソッドとrindexメソッドの使い方

文字列の中に別の文字列が含まれているかどうかの判定はfindメソッドやrfindメソッドで調べられます。

同じように文字列の中に含まれる文字列を検索するのがindexメソッドとrindexメソッドです。

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

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

文字列str内に含まれる文字列subを探します。

indexメソッドは先頭から検索を開始し最初に見つけた文字列のインデックス値を返却します。

rindexメソッドは末尾から検索を開始し最初に見つけた文字列のインデックス値を返却します。

コード例

# 文字列に含まれる文字列を探索(index・rindexメソッド)

txt = 'XABCYABCZABC'
ptn = 'ABC'

print(f'ptnが含まれるのはtxt[{txt.index(ptn)}]です。')
print(f'ptnが含まれるのはtxt[{txt.rindex(ptn)}]です。')

実行結果

ptnが含まれるのはtxt[1]です。
ptnが含まれるのはtxt[9]です。

find・rfindメソッド同様に検索したい文字列が複数含まれている場合は最初に見つけた場所、つまり最小のインデックス値を返します。

省略可能な第2引数のstartに検索を開始させたいインデックス値を指定するとそこから検索が始まります。

また省略可能な第3引数のendに指定されたインデックス値の直前の要素で検索が終了するのも同様です。

コード例

# 文字列に含まれる文字列をindexとrindexで探索(startとendを指定)

txt = 'XABCYABCZABC'
ptn = 'ABC'

print(f'ptnが含まれるのはtxt[{txt.index(ptn, 4)}]です。')
print(f'ptnが含まれるのはtxt[{txt.index(ptn, 8)}]です。')
print(f'ptnが含まれるのはtxt[{txt.index(ptn, 4, 8)}]です。')

print(f'ptnが含まれるのはtxt[{txt.rindex(ptn, 4)}]です。')
print(f'ptnが含まれるのはtxt[{txt.rindex(ptn, 4, 8)}]です。')
print(f'ptnが含まれるのはtxt[{txt.rindex(ptn, 0, 4)}]です。')

実行結果

ptnが含まれるのはtxt[5]です。
ptnが含まれるのはtxt[9]です。
ptnが含まれるのはtxt[5]です。
ptnが含まれるのはtxt[9]です。
ptnが含まれるのはtxt[5]です。
ptnが含まれるのはtxt[1]です。

find系とindex系の違いは例外送出の有無

findメソッドやrfindメソッドで文字列が見つからなかった場合は-1を返却します。

# 文字列に含まれる文字列を探索(find系で該当文字列が見つからない場合)

txt = 'XABCYABCZABC'
ptn = 'DEF'

print(f'ptnが含まれるのはtxt[{txt.find(ptn)}]です。')
print(f'ptnが含まれるのはtxt[{txt.rfind(ptn)}]です。')
ptnが含まれるのはtxt[-1]です。
ptnが含まれるのはtxt[-1]です。

ただインデックス値で-1というのは一番後ろのインデックスを指すのでこの表記だと明らかにおかしいです。

indexメソッドやrindexメソッドを使うと探している文字列が見つからない場合はValueError例外を送出します。

コード例

# 文字列に含まれる文字列を探索(ValueError例外を送出)

txt = 'XABCYABCZABC'
ptn = 'DEF'

try:
  print(f'ptnが含まれるのはtxt[{txt.index(ptn)}]です。')
except ValueError:
  print('ptnはtxtに含まれません。')

実行結果

ptnはtxtに含まれません。

list型のリストにもindexメソッド

list型のリストの中にある特定の要素を探したいときにもindexメソッドが使えます。

一方findメソッドは文字列のメソッドなのでリストには適応できません。

コード例

# リストに含まれる要素を探索(indexメソッド)

lst = [1, 2, 3, 4, 5]

print(f'2が含まれるのはlst[{lst.index(2)}]です。')

実行結果

2が含まれるのはlst[1]です。