【Python】文字列の探索・検索(findメソッド)

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



findメソッドによる文字列の探索・検索

文字列の中に別の文字列が含まれているかどうかの判定はin演算子とnot in演算子で調べられます。

ただしin演算子では含まれるかどうかがわかっても含まれる位置はわかりません。

含まれる位置を調べられるのがfindメソッドとrfindメソッドです。

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

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

findメソッドでは文字列strの[start:end]にsubが含まれていればその最小のインデックスを返却し、見つからなければ-1を返却します。

rfindメソッドではsubが含まれていればその最大のインデックスを返却します。

省略可能な引数startとendはスライス表記と同様の指定です。

コード例


# 文字列に含まれる文字列を探索(find,rfindメソッド)

txt = 'XABCYABCZABC'
ptn = 'ABC'

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

実行結果

txt[1]にptnが含まれます。
txt[9]にptnが含まれます。


indexメソッドによる文字列の探索・検索

indexメソッドとrindexメソッドでも文字列の探索が可能です。

使い方や結果はそれぞれfind、rfindメソッドとほぼ同じですが、subが見つからなかった場合はValueError例外を送出します。

コード例


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

txt = input('文字列txt : ')
ptn = input('文字列ptn : ')

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

実行結果(1)

文字列txt : XABCYABCZABC
文字列ptn : ABC
txt[1]にptnが含まれます。
txt[9]にptnが含まれます。

実行結果(2)

文字列txt : XABCYABCZABC
文字列ptn : XYZ
txtにptnは含まれていません。

r系メソッドではsubが複数含まれている場合は最も末尾側に含まれる位置を返却します。