Python正規表現で文中の複数の単語をどこでもマッチさせる方法
Pythonの正規表現(reモジュール)を使うと、文字列の中から複数のキーワードを一度に検索できます。ポイントは、選択(OR)を表す「|」を使ってパターンを組み合わせることです。各単語を \b(単語境界)で囲むことで、部分一致ではなく完全な単語としてマッチさせることができます。
基本的なコード例
以下のコードでは、re.compile()で「roses」「marigolds」「orchids」の3つの単語に対応する正規表現パターンを作成し、対象の文字列から該当するすべての単語を抽出しています。
import re s = "These are roses and lilies and orchids, but not marigolds or .." r = re.compile(r'\broses\b | \bmarigolds\b | \borchids\b', flags=re.I | re.X) print(r.findall(s))
実行結果
このコードを実行すると、次のような出力が得られます。
['roses', 'orchids', 'marigolds']
コードの解説
|(選択):複数のパターンのいずれかにマッチさせるための記号です。ここでは3つの単語パターンを連結しています。\b(単語境界):単語の先頭と末尾の境界を表します。これにより、「roses」が「aroses」などの一部として誤ってマッチすることを防ぎます。flags=re.I:大文字・小文字を区別せずにマッチさせます(Ignore case)。たとえば「Roses」や「ROSES」にもマッチします。flags=re.X:冗長モード(Verbose)。パターン内の空白やコメントを無視できるため、複雑なパターンを読みやすく記述できます。findall():文字列全体を走査し、マッチしたすべての部分をリストとして返します。
応用:リストから動的にパターンを生成する
検索したい単語が多い場合は、リストと join() を使ってパターンを動的に組み立てると便利です。
import re words = ['roses', 'marigolds', 'orchids'] pattern = r'\b(?:' + '|'.join(words) + r')\b' r = re.compile(pattern, flags=re.I) s = "These are roses and lilies and orchids, but not marigolds or .." print(r.findall(s)) # ['roses', 'orchids', 'marigolds']
この方法なら、単語リストを変更するだけで検索対象を柔軟に追加・削除でき、コードの保守性も向上します。
-
【Python】正規表現を使って文字列内の単語をマッチ・抽出する方法
次のコードは、指定された文字列の中から「meeting」という単語を抽出します。ここでは肯定の先読み(look-ahead)と肯定の後読み(look-behind)アサーションを使用しています。これにより、単語を囲む文字の存在を条件として考慮しつつ、その文字自体はマッチ結果に含めないようにできます。コード例import re s = https://www.google.com/meeting_agenda_minutes.html result = re.findall(r(?<=[\W_])meeting(?=[\W_]), s) print(result)出力[meeting]パ
-
Pythonの正規表現における修飾子(フラグ)の使い方と機能一覧
Python正規表現の修飾子とはPythonのreモジュールでは、正規表現によるパターンマッチングの挙動を制御するために、さまざまな修飾子(フラグ)を指定することができます。これらの修飾子を使うことで、大文字小文字の区別や改行の扱いなど、マッチングの動作を柔軟に変更できます。以下に、主要な修飾子とその機能を一覧形式で紹介します。1. re.I(re.IGNORECASE)大文字と小文字を区別せずにマッチングを行います。英字の大小を無視したい場合に便利です。2. re.L(re.LOCALE)現在のロケール設定に従って単語を解釈します。このフラグは、アルファベット系のグループ(\w および \W