【Python】部分一致を初心者向けにわかりやすく解説

はじめに

Pythonでは、文字列やファイル名などを部分的に一致させて検索する方法がいくつも用意されています。
少し似ている文字列を探したい場合や、複数の中から一部だけ合っている項目を抽出したいときに便利です。
ただ、初心者の皆さんにとっては、どの方法を使えばいいのか迷うこともあるかもしれませんね。

そこで本記事では、Python 部分一致のさまざまな実装方法を解説します。
具体的なサンプルコードを通じて、実務で役立つ活用イメージも一緒に見ていきましょう。

この記事を読むとわかること

  • Pythonで部分一致検索を行う代表的な方法
  • 文字列の一部を検索する実装例と使いどころ
  • 正規表現やファイル名検索など応用的な活用法

Pythonにおける部分一致とは?

部分一致とは、文字列やファイル名などの中から、一部の文字列パターンが合致するかどうかを判定する仕組みです。
厳密な一致(完全一致)ではなく、単語や文字列の一部だけを照合します。

例えば、文字列 "applepie" に対して "apple" が含まれているかどうかを調べたり、ファイル名 "data_report_2025.csv" の先頭部分が "data" で始まるかどうかをチェックしたい場面で役立ちます。
実務でも検索機能やデータのフィルタリングなど、多くの場面で使われる方法です。

ここからは、Pythonで部分一致検索を実装する具体的な手段を一緒に見ていきましょう。
それぞれのアプローチには得意・不得意があるので、実務で使う際のポイントにも触れていきます。

部分一致が活躍するシーン

部分一致を使うと、以下のようなケースで効率よく目的を達成できます。
どのようなシーンで利用されるのかをイメージしておくと、実務での応用がしやすくなります。

  • 文字列検索:ログファイルや文章の中から、特定キーワードを含む行だけを抽出したい
  • 名前のフィルタリング:ディレクトリにあるファイル名の中から、一致するものだけを一覧表示したい
  • ユーザー入力のチェック:フォームに入力された文字列の中に指定の単語が含まれているかを確認したい

実際には、これら以外にも、プログラムを組む場面で部分一致の機能がたびたび活躍するでしょう。
次のセクションで、具体的な検索方法をいくつかご紹介します。

文字列検索の基本:in演算子

Pythonで最もシンプルな部分一致検索といえば、in演算子です。
ある文字列が別の文字列の一部として含まれているかどうかを、手軽に確かめることができます。

例えば、以下のように書くと、"apple" という文字列が "applepie" という文字列に含まれるかどうかを判定できます。

text = "applepie"
if "apple" in text:
    print("apple という文字列が含まれています。")
else:
    print("apple は見つかりませんでした。")

ここでは、"apple" in textTrue かどうかを調べています。
もし "apple" が含まれていれば True、含まれていなければ False という結果を返すシンプルな仕組みです。

実務での活用イメージ

例えば、データを操作する場面で、ユーザーが入力したメッセージの中にNGワードが含まれていないかをチェックするときに便利です。
リストや辞書などの構造と組み合わせることで、複数の要素をまとめて検査することも可能となります。

前方・後方の部分一致:startswith() と endswith()

"in演算子" は文字列全体を幅広く検索するのに対して、先頭や末尾だけをチェックしたい場合は startswith()endswith() が便利です。

filename = "report_2025_data.csv"

# 先頭が "report" で始まるかどうか
if filename.startswith("report"):
    print("このファイル名は 'report' で始まります。")

# 末尾が ".csv" で終わるかどうか
if filename.endswith(".csv"):
    print("このファイルは CSV ファイルです。")

これらのメソッドは部分一致の一種として活用できます。
範囲を指定した検索ではなく、先頭末尾に限って検索できる機能なので、ファイル名やURL、ユーザー名など特定のパターンを持つ情報を扱う場合に重宝します。

実務での活用イメージ

ファイル管理やデータ処理をするときに「決まったプレフィックス(接頭語)やサフィックス(接尾語)をもつものだけを抽出したい」といったケースがあります。
一括でファイル名を変更するときなどにも活用できるため、業務自動化のスクリプトを書く際に便利です。

正規表現で高度な部分一致:reモジュール

キーワードが複数パターンにわたる場合や、より柔軟な検索をしたい場合には 正規表現 (reモジュール) を使うのが有効です。
正規表現を用いると、文字列の中で複数パターンの部分一致を一度に探したり、特殊な条件を加味した検索ができます。

import re

text = "user123, userABC, user_xyz"

# "user" のあとに数字が続くパターンを検索
pattern = r"user\d+"
match = re.search(pattern, text)

if match:
    print("該当パターンが見つかりました:", match.group())
else:
    print("該当パターンは見つかりませんでした。")

r"user\d+" は、「user のあとに1文字以上の数字(\d+)が続く」という意味になります。
re.search() は、そのパターンに合う文字列を見つけると、マッチした情報を返してくれます。

実務での活用イメージ

  • ログ解析で、特定の形式にマッチする行だけを抽出する
  • ユーザー名のフォーマットが正しいかを確認する
  • イベントリストから日時の形式を判定する

in演算子 だと厳密なパターン指定ができない場面で、このように正規表現を使うことで柔軟な部分一致が可能になります。

ファイル名の部分一致:glob と fnmatch

文字列検索だけでなく、ディレクトリ内のファイル名を部分一致で一覧取得したいケースもあるでしょう。
Pythonでは、globfnmatch という標準ライブラリを用いてワイルドカード検索を行う方法があります。

import glob

# フォルダ内の CSV ファイルだけを一覧表示
csv_files = glob.glob("*.csv")
print(csv_files)

glob.glob("*.csv") は、現在のディレクトリにあるすべての .csv ファイルをリスト化してくれます。
これも部分一致検索の一種で、拡張子だけをフィルタリングしたい場合などに活用されます。

import fnmatch
import os

files = os.listdir(".")
# "report_" から始まるファイル名だけを抽出
for f in files:
    if fnmatch.fnmatch(f, "report_*"):
        print(f)

fnmatch.fnmatch(f, "report_*") は、f が "report_" で始まるファイルかどうかをワイルドカードで判定します。
複雑な検索条件が必要な場合は、fnmatch の方がカスタマイズしやすいことがあります。

実務での活用イメージ

大量のファイルがあるフォルダから、一部の名前パターンを持つファイルだけを抽出したい場合に便利です。
データの整理やバックアップを行うスクリプトなどで利用すると作業効率が高まります。

部分一致を使ったよくある実務活用例

ログファイルを検索する

ウェブアプリなどが吐き出すログファイルから、エラー行だけを部分一致で探し出すのは非常に便利です。
例えば、if "[ERROR]" in line: のように書いて、エラー行だけを抽出・保存すると手がかりが見つけやすくなります。

正規表現を使えば、何時何分に発生したエラーかを調べたり、ユーザーIDが含まれる行だけを抜き出すことも可能です。
特に運用や保守の現場では、こうしたログの検索は頻繁に行われます。

ユーザー入力の検証

ユーザーの入力内容に、特定のキーワードが入っているかどうかをチェックするのも部分一致の出番です。
例えば、パスワードの安全性を検証するときに、NGワードが含まれていないかチェックするなどの処理を簡単に実装できます。

in演算子でシンプルにチェックできる場合もあれば、正規表現で複雑なルールを定義できる場合もあります。
どのようなルールを定めるかによって、使い分けると良いでしょう。

部分一致を使うときの注意点

部分一致を行うときに意識しておくと役立つポイントがあります。
以下を踏まえておくと、トラブルを回避しやすくなるでしょう。

意図しないマッチに注意する

たとえば "car" を探すとき、"cart" や "scar" などもヒットしてしまう場合があります。
「単語境界を考慮すべきかどうか」などを最初に決めておくことが大切です。

大文字・小文字の違い

デフォルトでは "Apple" と "apple" は異なるものとして扱われます。
必要に応じて .lower() などで文字列を統一してから比較するとよいでしょう。

大量データでのパフォーマンス

文字列検索や正規表現を大量の行に対して行うと処理時間がかさむケースがあります。
もし大量データを扱うなら、まとめて処理できる手法や効率的なアルゴリズムを検討しましょう。

膨大なファイルやテキストデータを扱う場合、正規表現や部分一致を濫用すると処理が重くなるケースがあります。 必要に応じて検索方法を変える、データベースを利用するなどの対策も検討するとよいでしょう。

まとめ

Python 部分一致には、in演算子・startswith()・endswith() などの基本的な方法から、正規表現やファイル検索など幅広い手段が存在します。
シンプルな検索や複雑な条件を含む検索、ファイル名のパターン指定など、用途に応じて使い分けることがポイントです。

初心者の皆さんがまず取り組みやすいのは、in演算子startswith()/endswith() です。
慣れてきたら、正規表現やファイル検索ライブラリにも挑戦してみましょう。
部分一致検索を使いこなせるようになると、データ処理やログ解析など多くの場面で役立つはずです。

Pythonをマスターしよう

この記事で学んだPythonの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。