Pythonのfind()メソッドを徹底解説! 文字列中の部分文字列を効率的に探す


 

Pythonで文字列を扱っていると、「この文字列の中に、特定の部分文字列が含まれているか知りたい」「その部分文字列がどこから始まるか知りたい」といった場面は頻繁にありますよね。そんな時に非常に便利で効率的なのが、文字列が持つ**find()メソッド**です。

この記事では、find()メソッドの基本的な使い方から、その挙動、そして知っておくと便利な応用例まで、初心者の方にも分かりやすく徹底的に解説します。find()をマスターすれば、あなたのPythonコードでの文字列処理が格段にスムーズになりますよ!


 

find()メソッドとは? なぜ使うのか?

 

find()メソッドは、文字列の中から指定した部分文字列(サブストリング)を検索し、最初に見つかった位置(インデックス)を返すためのメソッドです。

なぜfind()を使うのでしょうか?

  • 部分文字列の検索と位置特定: 特定の単語やパターンが文字列内のどこにあるかを知りたい場合に最適です。

  • エラーを発生させない: 似たような機能を持つindex()メソッドとは異なり、部分文字列が見つからなかった場合にValueErrorを発生させず、-1を返すため、エラーハンドリングの手間が省けます。

  • 効率的な処理: 大規模な文字列の中から部分文字列を探す際に、Pythonの内部で最適化された高速な処理が行われます。


 

find()メソッドの基本的な使い方

 

find()メソッドは、対象となる文字列オブジェクトにドット(.)で続けて呼び出します。引数には、検索したい部分文字列を指定します。

 

構文

 

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

 

引数

 

  • sub (必須): 検索したい部分文字列(サブストリング)。

  • start (オプション): 検索を開始するインデックス(整数)。デフォルトは0(文字列の先頭から)。

  • end (オプション): 検索を終了するインデックス(整数)。このインデックスは含まれません。デフォルトは文字列の終わりまで。

 

戻り値

 

部分文字列が最初に見つかった開始位置のインデックス(整数)。見つからなかった場合は**-1**。

 

具体例

 

Python
 
my_text = "Pythonプログラミングは楽しい!Pythonを学ぼう。"

# 部分文字列 'Python' を検索
pos1 = my_text.find("Python")
print(f"'Python' が最初に見つかった位置: {pos1}") # 出力: 'Python' が最初に見つかった位置: 0

# 存在しない部分文字列を検索
pos_not_found = my_text.find("Java")
print(f"'Java' が見つかった位置: {pos_not_found}") # 出力: 'Java' が見つかった位置: -1

# 特定の範囲内で検索 (インデックス6から最後まで)
pos2 = my_text.find("Python", 6)
print(f"インデックス6以降で 'Python' が見つかった位置: {pos2}") # 出力: インデックス6以降で 'Python' が見つかった位置: 14

# 特定の範囲内で検索 (インデックス0からインデックス10まで)
pos3 = my_text.find("プログラミング", 0, 10)
print(f"インデックス0から10の範囲で 'プログラミング' が見つかった位置: {pos3}") # 出力: インデックス0から10の範囲で 'プログラミング' が見つかった位置: -1 (範囲外)

pos4 = my_text.find("プログラミング", 0, 15)
print(f"インデックス0から15の範囲で 'プログラミング' が見つかった位置: {pos4}") # 出力: インデックス0から15の範囲で 'プログラミング' が見つかった位置: 6

 

find()index()の違い(重要!)

 

find()と非常によく似た機能を持つのが、文字列のindex()メソッドです。しかし、両者には重要な違いがあります。

特徴str.find()メソッドstr.index()メソッド
見つからなかった場合-1を返すValueErrorを発生させる
目的主に部分文字列の存在確認位置取得部分文字列が必ず存在すると期待される場合
Python
 
my_string = "hello world"

# find() の場合
print(my_string.find("world"))   # 出力: 6
print(my_string.find("python"))  # 出力: -1

# index() の場合
print(my_string.index("world"))  # 出力: 6
# print(my_string.index("python")) # ValueError: substring not found

使い分けのポイント:

  • 部分文字列が見つからない可能性があり、その状況をエラーとして扱いたくない場合find()

  • 部分文字列が必ず存在すると確信しており、見つからない場合はプログラムを中断させたい場合index()(または、見つからなかったときに明示的にエラーを発生させたい場合)。


 

find()メソッドの応用例

 

 

1. 文字列の存在確認として使う

 

find()の戻り値が-1でないことを利用して、部分文字列の存在を簡単に確認できます。

Python
 
sentence = "Python is a powerful language."

if sentence.find("Python") != -1:
    print("この文章には 'Python' が含まれています。")
# 出力: この文章には 'Python' が含まれています。

if sentence.find("Java") == -1:
    print("この文章には 'Java' は含まれていません。")
# 出力: この文章には 'Java' は含まれていません。

ヒント: 部分文字列の存在確認だけであれば、よりPythonicなin演算子を使うのが一般的です。

Python
 
if "Python" in sentence:
    print("この文章には 'Python' が含まれています。(in演算子)")

find()は「位置も知りたい」場合に特に有用です。

 

2. 特定の区切り文字で文字列を分割する前の確認

 

ファイルパスやURLなど、特定の区切り文字(/:など)が存在するか確認してから処理を行う際に利用できます。

Python
 
file_path = "data/report_2023.csv"
if file_path.find("/") != -1:
    dir_end_index = file_path.rfind("/") # rfind()は後ろから検索
    directory = file_path[:dir_end_index]
    filename = file_path[dir_end_index+1:]
    print(f"ディレクトリ: {directory}, ファイル名: {filename}")
# 出力: ディレクトリ: data, ファイル名: report_2023.csv

rfind()について: rfind()find()と同様に機能しますが、文字列の末尾から検索を開始し、部分文字列が最初に見つかった(文字列の先頭からの)インデックスを返します。


 

まとめ

 

find()メソッドは、Pythonで文字列中の部分文字列を検索し、その位置を特定するための非常に便利で安全なツールです。

  • 文字列中から部分文字列を検索し、最初に見つかった位置のインデックスを返す

  • 部分文字列が見つからなかった場合は-1を返すValueErrorを発生させない)。

  • startend引数で検索範囲を指定できる。

  • index()メソッドと異なり、エラーを発生させないため、存在チェックに特に向いている。

  • 文字列の存在確認だけであればin演算子の方が簡潔。

find()メソッドを適切に使いこなすことで、あなたのPythonコードでの文字列操作がより堅牢で効率的になるでしょう。ぜひ今日学んだことを、あなたのコーディングに活かしてみてくださいね!


 

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座