Pythonの正規表現でテキスト内のすべての副詞とその位置を検索する方法
finditer()でマッチ情報を詳しく取得する
Pythonの公式ドキュメントによると、パターンにマッチしたテキストそのものだけでなく、より詳細な情報が必要な場合には re.finditer() が便利です。通常の re.findall() がマッチした文字列のリストを返すのに対し、finditer() はマッチオブジェクト(match object)を返します。これにより、マッチした文字列だけでなく、その開始位置や終了位置といった付加情報にもアクセスできます。
副詞とその出現位置を検出する実例
たとえば、ある文章の中に含まれるすべての副詞(「〜ly」で終わる英単語)と、それぞれが文中のどの位置に出現するかを知りたいライターがいたとしましょう。このようなケースでは、finditer() を次のように活用できます。
>>> text = "He was carefully disguised but captured quickly by police."
>>> for m in re.finditer(r"\w+ly", text):
... print('%02d-%02d: %s' % (m.start(), m.end(), m.group(0)))
07-16: carefully
40-47: quicklyコードのポイント解説
このコードでは、正規表現パターン r"\w+ly" を使って、「carefully」や「quickly」のように ly で終わる単語を検索しています。ループ内で取得できるマッチオブジェクト m には、以下の有用なメソッドが用意されています。
- m.start(): マッチした部分の開始インデックス(0始まり)を返します。
- m.end(): マッチした部分の終了インデックス(+1)を返します。
- m.group(0): 実際にマッチした文字列全体を返します。
実行結果を見ると、「carefully」は7〜16文字目、「quickly」は40〜47文字目に出現していることがひと目でわかります。このように finditer() を使えば、テキストマイニングや文章解析など、位置情報が重要になる処理をシンプルかつ効率的に実装できます。
-
【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で文字列内のテキストを検索・置換する方法|re.sub()の使い方を解説
Pythonの標準ライブラリである「re」モジュールには、指定したパターンを検索して新しい部分文字列に置き換えるための re.sub() メソッドが用意されています。もし指定したパターンが見つからなかった場合は、元の文字列がそのまま変更されずに返されます。 re.sub() の基本構文 re.sub(pattern, repl, string) 各引数の意味は以下のとおりです。 pattern:検索したい正規表現パターン repl:置き換え後の文字列 string:検索対象となる元の文字列 使用例 次のコードでは、文字列「TP is most popular Tutorials si