Pythonの正規表現で各マッチの正確な位置を取得する方法
Pythonの正規表現で、文字列内の各マッチの正確な位置(開始インデックス)を取得するには、re.finditer()メソッドを使用します。このメソッドは、パターンに一致したすべての箇所をイテレータとして順番に返してくれるため、各マッチの開始位置や一致した文字列を簡単に取り出すことができます。
使用例
import re
p = re.compile("[A-Z0-9]")
for m in p.finditer('A5B6C7D8'):
print(m.start(), m.group())
実行結果
0 A 1 5 2 B 3 6 4 C 5 7 6 D 7 8
コードの解説
この例では、大文字アルファベット(A〜Z)または数字(0〜9)1文字に一致するパターン[A-Z0-9]をコンパイルし、対象文字列'A5B6C7D8'に対してfinditer()を実行しています。
ループ内で使える主なメソッドは以下の通りです。
m.start():マッチが始まる位置のインデックス(先頭は0)を返しますm.group():実際に一致した文字列を返しますm.end():マッチの終了位置(次の文字のインデックス)を返しますm.span():(start, end) のタプルを返します
finditer()を使うことで、re.findall()のように一致した文字列だけを得るのではなく、それぞれのマッチが元の文字列のどこにあるかという位置情報も一緒に取得できるのが大きなメリットです。
-
Pythonの正規表現で単語以外の文字をマッチさせる方法
正規表現を使って文字列から「単語以外の文字」を取り出したい場合、Pythonのreモジュールに用意されている特殊シーケンス \W を使うのが最も簡単です。\W は、英字・数字・アンダースコア([^a-zA-Z0-9_])以外のすべての文字に一致します。以下のコードでは、指定した文字列から単語以外の文字をすべて抽出し、そのリストを出力しています。コード例import re s = ab5z8d*$&Y@ regx = re.compile(r\W) result = regx.findall(s) print(result)ポイントとして、パターン文字列の先頭に r を付けて raw 文字列に
-
【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]パ