文字列を検索するとはどういうことか
Pythonで文字列を扱うとき、「この文字列の中に特定の単語が含まれているか」「どこに現れているか」「何回出てくるか」を調べたい場面はとても多いです。 ログ解析、エラーメッセージの判定、ユーザー入力のチェック、簡易フィルタリング、セキュリティ上の危険なパターン検出など、すべて「文字列検索」が土台になります。
ここでは、初心者向けに 文字列を検索する基本テクニック をステップバイステップで整理しながら、 in 演算子、find()、index()、startswith()、endswith()、count() などを、例題とテンプレートを交えて丁寧に解説していきます。
最も基本的な検索:in 演算子で「含まれているか」を調べる
in の基本的な使い方
text = "Pythonで文字列を検索します"
if "文字列" in text:
print("『文字列』が含まれています")
Python"部分文字列" in 全体の文字列 という形で書くことで、 「その部分文字列が含まれているかどうか」 を真偽値(True/False)で判定できます。
これは、
- 条件分岐
- フィルタリング
- 簡易的なチェック などで最もよく使われる基本テクニックです。
含まれていない場合
if "エラー" not in text:
print("エラーという文字は含まれていません")
Pythonnot in を使うことで、「含まれていないこと」を条件にすることもできます。
深掘り:in のメリット
- 書き方が直感的で分かりやすい
- True/False で返ってくるので条件分岐にそのまま使える
- 位置は気にせず「含まれているかどうか」だけ知りたいときに最適
初心者のうちは、「まず in で存在チェック」 という感覚を持っておくと良いです。
位置を知りたいとき:find() でインデックスを取得する
find() の基本
text = "Pythonで文字列を検索します"
pos = text.find("文字列")
print(pos) # 7(0から数えた位置)
Pythonfind() は、
- 見つかった場合 → 最初に現れた位置(インデックス)
- 見つからなかった場合 →
-1を返します。
見つからなかった場合の扱い
pos = text.find("エラー")
if pos == -1:
print("『エラー』は見つかりませんでした")
else:
print(f"『エラー』は位置 {pos} にあります")
Python-1 が「見つからない」という特別な値なので、 「find() を使うときは必ず -1 チェックをセットで考える」 という習慣を持つことが大事です。
部分的な範囲を指定して検索する
text = "Pythonで文字列を検索します。文字列は重要です。"
pos = text.find("文字列", 10) # 10文字目以降から検索
print(pos)
Pythonfind(検索文字列, 開始位置, 終了位置) のように、 検索範囲を絞ることもできます。
深掘り:find() を使う場面
- 「どこにあるか」を知りたい
- 見つかった位置からさらに処理したい(切り出しなど)
- 見つからなかった場合も含めて判定したい
in は「あるかどうか」だけ、find() は「どこにあるか」まで知りたいときに使い分けます。
見つからないときはエラーにしたい:index()
index() の基本
text = "Pythonで文字列を検索します"
pos = text.index("文字列")
print(pos) # 7
Pythonindex() は find() と似ていますが、 見つからなかった場合に ValueError を送出する という違いがあります。
text = "Pythonで文字列を検索します"
pos = text.index("エラー") # ❌ ValueError
Python深掘り:index() を使う意図
- 「見つからないことは想定していない」
- 「見つからなかったら即エラーにしたい」
という場合に、 find() ではなく index() を使うことで、 「異常系を見逃さない」 コードになります。
ただし、初心者のうちは、
- まず
inとfind()に慣れる - エラー処理をきちんと書けるようになってから
index()を使う というステップで進めると理解しやすいです。
先頭・末尾を検索する:startswith() と endswith()
startswith() で「先頭が一致するか」を調べる
text = "ERROR: データが不正です"
if text.startswith("ERROR"):
print("エラーメッセージです")
Pythonstartswith() は、 「文字列が特定の文字列で始まっているかどうか」 を判定します。
ログやメッセージの種別判定などでよく使われます。
endswith() で「末尾が一致するか」を調べる
filename = "data.csv"
if filename.endswith(".csv"):
print("CSVファイルです")
Pythonendswith() は、 「文字列が特定の文字列で終わっているかどうか」 を判定します。
ファイル拡張子のチェックなどで頻繁に使われます。
深掘り:startswith()/endswith() のメリット
- 「先頭」「末尾」という意図が明確
text[:5] == "ERROR"のような書き方より読みやすい- 複数の候補をまとめてチェックできる(タプルを渡せる)
if filename.endswith((".txt", ".md", ".log")):
print("テキスト系のファイルです")
Python出現回数を知りたい:count()
count() の基本
text = "Pythonで文字列を検索します。文字列は重要です。"
c = text.count("文字列")
print(c) # 2
Pythoncount() は、 「指定した部分文字列が何回出てくるか」 を返します。
深掘り:count() を使う場面
- 危険なキーワードが何回出ているかをチェックする
- ログ中の特定のタグの出現回数を数える
- テキスト解析の簡易的な指標として使う
例えば、
if text.count("DROP TABLE") > 0:
print("危険なSQLが含まれています")
Pythonのように、 セキュリティチェックにも応用できます。
セキュリティと品質の観点から見た「文字列検索」の重要性
1. 危険なパターンの検出
ユーザー入力や外部データの中に、
- SQLインジェクションのパターン
- コマンドインジェクションのパターン
- XSS(スクリプト)のパターン
などが含まれていないかをチェックする際に、 文字列検索は基本的な防御手段になります。
query = "SELECT * FROM users; DROP TABLE users;"
if "DROP TABLE" in query:
print("危険なクエリです")
Pythonもちろん、実務ではもっと高度な対策が必要ですが、 「危険な文字列が含まれているかどうかを検索する」 という発想は、セキュリティの入り口として非常に重要です。
2. ログやメッセージの分類
log = "WARN: メモリ使用量が高くなっています"
if log.startswith("ERROR"):
level = "error"
elif log.startswith("WARN"):
level = "warning"
else:
level = "info"
Python文字列検索を使ってログの種別を判定することで、
- 重要度に応じた処理
- 通知の優先度分け などが可能になります。
3. 入力バリデーション
comment = "これはテストです<script>alert('xss')</script>"
if "<script>" in comment:
print("危険な入力です")
Python単純なチェックでは不十分な場合もありますが、 「特定の文字列が含まれているかどうか」 を見ることは、 バリデーションの一部として有効です。
文字列検索のテンプレートと練習用コード
存在チェックテンプレート(in)
def contains_error(text):
return "ERROR" in text
Python位置取得テンプレート(find)
def find_first(text, keyword):
pos = text.find(keyword)
if pos == -1:
return "見つかりませんでした"
return f"位置 {pos} に見つかりました"
Python先頭・末尾チェックテンプレート
def is_error_log(line):
return line.startswith("ERROR")
def is_csv_file(name):
return name.endswith(".csv")
Python出現回数カウントテンプレート
def count_keyword(text, keyword):
return text.count(keyword)
Pythonまとめ
- 「含まれているかどうか」を調べるには
in演算子が最もシンプルで分かりやすいです。 - 「どこにあるか」を知りたいときは
find()、見つからないことをエラーにしたいときはindex()を使います。 - 先頭・末尾の判定には
startswith()とendswith()があり、ログやファイル名の判定に非常に便利です。 - 出現回数を知りたいときは
count()を使い、危険なキーワードの検出や簡易解析に応用できます。 - 文字列検索は、入力バリデーション・ログ分類・セキュリティチェックなど、実務の多くの場面で重要な役割を果たします。
「文字列を検索する」という操作は、単なるテキスト処理ではなく、 システムの安全性や信頼性を支える基礎的な技術でもあります。 ここを丁寧に押さえておくことで、Pythonでの文字列処理が一段と実践的なものになっていきます。

