概要
Pythonのfind()
メソッドは、指定した部分文字列が文字列内で最初に見つかる位置のインデックスを返すメソッドです。
サンプルコードで色々やってみたので使い方を紹介します。
find()
メソッドのサンプルコード
# 元の文字列
string = "Hello, world! My world is beautiful."
# 部分文字列
substring1 = "Hello"
substring2 = "world"
# 部分文字列が文字列の先頭にあるかどうか判定する
if string.find(substring1) == 0:
print(f"'{substring1}' は文字列の先頭にあります。")
# 出力結果:'Hello' は文字列の先頭にあります。
# 部分文字列が文字列の先頭にないか、または全く見つからないかどうかを判定する
if string.find(substring2) != 0:
print(f"'{substring2}'は文字列の先頭にないか、または全く見つかりません。")
else:
print(f"'{substring2}'は文字列の先頭にあります。")
# 出力結果:'world'は文字列の先頭にないか、または全く見つかりません。
# 部分文字列が2回目に出現する位置を探す
start = string.find(substring2) + 1
second_occurrence = string.find(substring2, start)
if second_occurrence != -1:
print(f"'{substring2}'の2回目の出現はインデックス{second_occurrence}にあります。")
else:
print(f"'{substring2}'は2回以上出現しません。")
# 出力結果:'world'は文字列の先頭にないか、または全く見つかりません。
# 部分文字列が指定した範囲内に存在するかどうかを確認
start = 0
end = 10
if string.find(substring1, start, end) != -1:
print(f"'{substring1}'はインデックス{start}から{end}の範囲内に存在します。")
else:
print(f"'{substring1}'はインデックス{start}から{end}の範囲内に存在しません。")
# 出力結果:'Hello'はインデックス0から10の範囲内に存在します。
一点、注意点があるなと思いました。
if string.find(substring2) != 0:
ですが、これは「文頭にない場合」を判定するように見えますが、そうではありません。なぜなら、find()
メソッドは、部分文字列が見つからない場合は-1
を返すためです。見つからない場合も、if string.find(substring2) != 0:
には含まれています。
また、string.find(substring2, start)
の形式では、find()
メソッドは文字列のstart
インデックスから最後までの範囲を検索しますが、string.find(substring1, start, end)
の形式では、文字列のstart
インデックスからend
インデックスまでの範囲を検索します。つまり、引数が2つの場合はstart
から文字列の最後までを検索し、引数が3つの場合はstart
からend
までの指定した範囲を検索してくれます。
末尾から検索したい場合はrfind
メソッド
・rfind
メソッドは、文字列の末尾から検索します。文末からある位置まで文字数を切り落としたい場合などに使えました。以前の記事はこちら
find()
とindex()
の違いとは
find()
とindex()
の違いは、部分文字列が見つからない場合の振る舞いが異なる点です。
-
find()
はに-1
を返す -
index()は
ValueError`を発生させる
# 元の文字列
string = "Hello, world! My world is beautiful."
# 部分文字列
substring3 = "Python"
# indexメソッドを使用して部分文字列を探す
try:
index = string.index(substring3)
print(f"'{substring3}'はインデックス{index}にあります。")
except ValueError:
print(f"'{substring3}'は見つかりません。")
# 出力結果:'Python'は見つかりません。
上記結果の通り、エラーとして拾いたい場合は使えます。
また、find()
と同様、rindex
メソッドを使用すると文字列の末尾から検索してくれます。
存在チェックで良い場合はin
演算子
in
演算子を利用することで、特定の文字列が存在するかどうかを確認できますが、これはインデックスまでは教えてくれません。True
/False
を返すものなので、存在するかの判定のみで良い場合は使えます。
find() メソッドは、 sub の位置を知りたいときにのみ使うべきです。 sub が部分文字列であるかどうかのみを調べるには、 in 演算子を使ってください: