Pythonで正規表現のルックアヘッドとルックビハインドを理解する

この記事では、Pythonで使用される正規表現におけるルックアヘッドとルックビハインドについて深く探ります。具体的なコード例とその詳細な解説、さらには応用例を含めて説明していきます。

目次

はじめに:正規表現とは

正規表現(Regular Expression)とは、テキストデータの検索や置換を行うためのパターン言語です。Pythonでは`re`モジュールを用いて正規表現を扱います。

ルックアヘッドとルックビハインドの基礎

ルックアヘッドとルックビハインドは、正規表現でよく用いられる先読み、後読みのテクニックです。

ルックアヘッド(Lookahead)

ルックアヘッドは、あるパターンに続くテキストを指定しますが、そのテキスト自体は結果には含まれません。

基本構文

import re
pattern = r'\\d(?=\\D)'
result = re.findall(pattern, '123a456')

このコード例では、数字(\d)に続く非数字(\D)を見つける正規表現を用います。ただし、非数字自体は結果に含まれません。

ルックビハインド(Lookbehind)

ルックビハインドは、あるパターンが先行するテキストを指定しますが、そのテキスト自体も結果には含まれません。

基本構文

pattern = r'(?<=\\D)\\d'
result = re.findall(pattern, 'a123456')

このコードでは、非数字(\D)に続く数字(\d)を見つけます。ただし、非数字自体は結果に含まれません。

応用例

応用例1:価格と通貨単位を分離する

pattern = r'\\d+(?=\\s円)'
result = re.findall(pattern, '100 円, 200 円, 300 円')

この応用例では、"円"に先立つ数字を取得します。このようにして価格と通貨単位を簡単に分離できます。

応用例2:URLからクエリパラメータを抽出する

pattern = r'(?<=\\?|&)([^=]+)=([^&]+)'
result = re.findall(pattern, 'www.example.com?name=John&age=30')

この応用例では、URLからクエリパラメータを抽出します。ここでは、ルックビハインドを使って"&"または"?"に続くパラメータを取得しています。

まとめ

正規表現のルックアヘッドとルックビハインドは、テキスト処理において非常に強力なツールです。特定のパターンがどのようにテキストに現れるかを精密に制御できるため、高度なテキストマイニングやデータクレンジング作業に役立ちます。

コメント

コメントする

目次