Pythonで文字列を扱うとき、とても便利なのがfind()
メソッドです。
特定の文字や単語が文字列のどこにあるかを調べられます。条件分岐やデータ抽出など、いろいろな場面で活躍します。
この記事では、Pythonのfind()
メソッドの基本的な使い方から応用テクニック、注意点まで、わかりやすく解説します。
find()の基本的な使い方

構文の説明
str.find(sub[, start[, end]])
パラメータの説明
sub
:検索したい部分文字列start
(省略可):検索を開始する位置end
(省略可):検索を終了する位置
基本的な使用例
text = "Pythonは楽しい"
print(text.find("楽")) # 出力: 6
find()
メソッドは見つかった位置のインデックス(0始まり)を返します。
見つからなかった場合は-1
を返すのが特徴です。
なぜインデックスが6なのか?
文字列"Pythonは楽しい"
を文字ごとに分けると次のようになります:
文字 | P | y | t | h | o | n | は | 楽 | し | い |
---|---|---|---|---|---|---|---|---|---|---|
インデックス | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
「楽」の文字は7番目にありますが、インデックスは0から始まるため6になります。
find()
は検索結果のインデックスを返すシンプルなメソッドです。
次は、似たような機能を持つindex()
メソッドとの違いを見てみましょう。
index()との違いと使い分け

index()
メソッドも同じように文字列を検索しますが、見つからなかった場合にエラー(ValueError)を発生させる点が大きく違います。
動作の比較例
text = "Python"
# 両方とも見つかる場合
print(text.find("y")) # 出力: 1
print(text.index("y")) # 出力: 1
# 見つからない場合の違い
print(text.find("z")) # 出力: -1
print(text.index("z")) # ValueError: substring not found
どちらを使うべきか?
find()を使う場面
- 文字列が存在するかわからない場合
- エラーを避けたい場合
- 条件分岐で結果を処理したい場合
index()を使う場面
- 文字列の存在が確実な場合
- 見つからない場合はプログラムを停止させたい場合
安全に検索したい場合はfind()
、存在が確実なときはindex()
を選ぶのが良いでしょう。次は、find()
のより高度な使い方を見てみましょう。
find()の応用テクニック
同じ文字列を複数検出する
文字列内に同じ文字が複数ある場合、すべての位置を見つける方法です。
text = "abcabcabc"
pos = -1
positions = []
while True:
pos = text.find("a", pos + 1)
if pos == -1:
break
positions.append(pos)
print(f"'a' found at index {pos}")
print(f"すべての位置: {positions}")
# 出力:
# 'a' found at index 0
# 'a' found at index 3
# 'a' found at index 6
# すべての位置: [0, 3, 6]
検索範囲を限定する
start
パラメータを使って、検索開始位置を指定できます。
text = "abcdefgabc"
# 最初から検索
print(text.find("a")) # 出力: 0
# 5番目の位置から検索
print(text.find("a", 5)) # 出力: 7
# 範囲を指定して検索(5番目から8番目まで)
print(text.find("a", 5, 8)) # 出力: 7
実用的な例:ファイル拡張子の取得
filename = "document.pdf"
dot_pos = filename.find(".")
if dot_pos != -1:
extension = filename[dot_pos + 1:]
print(f"ファイル拡張子: {extension}") # 出力: pdf
else:
print("拡張子なし")
start
やend
パラメータを活用すれば、より柔軟で効率的な検索が可能になります。最後に、find()
を使う際の重要な注意点を確認しておきましょう。
find()を使う際の注意点

戻り値-1の扱い方
見つからなかった場合の戻り値-1
は、条件分岐で注意が必要です。
text = "Hello"
# 正しい書き方
if text.find("H") != -1:
print("Hが見つかりました")
# 間違った書き方(0の場合にFalseと判定される)
if text.find("H"): # 0の場合、Falseとして扱われる
print("この書き方は危険です")
大文字と小文字の区別
find()
は大文字と小文字を区別します。
text = "Hello World"
print(text.find("hello")) # 出力: -1(見つからない)
print(text.find("Hello")) # 出力: 0(見つかる)
# 大文字小文字を無視したい場合
print(text.lower().find("hello")) # 出力: 0
マルチバイト文字への対応
日本語などのマルチバイト文字も問題なく検索できます。
text = "こんにちは世界"
print(text.find("世界")) # 出力: 5
print(text.find("hello")) # 出力: -1
パフォーマンスの考慮
長い文字列で頻繁に検索する場合は、正規表現や他の方法も検討しましょう。
import re
# 複雑なパターン検索には正規表現が適している
text = "メール: test@example.com"
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
match = re.search(pattern, text)
if match:
print(f"メールアドレス: {match.group()}")
戻り値-1
の扱いや文字の区別に注意することで、バグを防げます。用途に応じた適切な使い分けが重要です。
まとめ
この記事では、Pythonのfind()
メソッドについて詳しく解説しました。
重要なポイント
find()
は指定した文字列の位置をインデックスで返す便利なメソッド- 見つからない場合は
-1
を返す(index()
はエラーを発生) start
やend
パラメータで検索範囲を指定可能- 大文字小文字を区別することに注意
- 戻り値
-1
の条件分岐では!= -1
を使う
活用シーン
- テキストファイルの特定キーワード検索
- URLやメールアドレスの部分抽出
- CSVデータの特定文字位置特定
- ログファイルの解析
コメント