Python
 Computer >> コンピューター >  >> プログラミング >> Python

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']

この方法なら、単語リストを変更するだけで検索対象を柔軟に追加・削除でき、コードの保守性も向上します。

  1. 【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]パ

  2. Pythonの正規表現における修飾子(フラグ)の使い方と機能一覧

    Python正規表現の修飾子とはPythonのreモジュールでは、正規表現によるパターンマッチングの挙動を制御するために、さまざまな修飾子(フラグ)を指定することができます。これらの修飾子を使うことで、大文字小文字の区別や改行の扱いなど、マッチングの動作を柔軟に変更できます。以下に、主要な修飾子とその機能を一覧形式で紹介します。1. re.I(re.IGNORECASE)大文字と小文字を区別せずにマッチングを行います。英字の大小を無視したい場合に便利です。2. re.L(re.LOCALE)現在のロケール設定に従って単語を解釈します。このフラグは、アルファベット系のグループ(\w および \W