Pythonで複数行にわたるパターンマッチングを実現する方法

Pythonにおける複数行にわたるパターンマッチングは、テキスト解析やスクレイピング、ログ分析など多くの用途で有用です。この記事では、Pythonの正規表現モジュール`re`を用いて、複数行にわたるテキストから特定のパターンを見つけ出す手法を解説します。具体的なコード例とその解説、さらに応用例を含めています。

目次

正規表現とは

正規表現(Regular Expression)は、テキスト内の特定の文字列を探す際に使用されるパターンです。Pythonでは、`re`モジュールを用いて正規表現を活用することができます。

複数行にわたるパターンマッチングの基礎

通常、正規表現は一行に対してのみ適用されます。しかし、複数行にわたるテキストに対してもマッチングを行いたい場合は、`re.DOTALL`または`re.MULTILINE`フラグを使用します。

re.DOTALLフラグ

このフラグは、`.`(ドット)が改行文字を含む任意の文字にマッチするようにします。

基本的な使用例

import re

text = '''This is line 1.
This is line 2.
This is line 3.'''

pattern = r'This is.*3.'

# re.DOTALLを指定
match = re.search(pattern, text, re.DOTALL)

if match:
    print("マッチしたテキスト:", match.group())
else:
    print("マッチしませんでした")

この例では、`This is`から始まり`3.`で終わるテキストにマッチします。`re.DOTALL`フラグによって、`.`が改行文字にもマッチするため、複数行にわたるテキストでもマッチングが行えます。

re.MULTILINEフラグ

このフラグは、`^`と`$`が文字列の各行の開始と終了にマッチするようにします。

基本的な使用例

# re.MULTILINEを指定
pattern = r'^This is line 2.$'
match = re.search(pattern, text, re.MULTILINE)

if match:
    print("マッチしたテキスト:", match.group())
else:
    print("マッチしませんでした")

この例では、`^This is line 2.$`というパターンが2行目にマッチするかどうかを確認しています。`re.MULTILINE`フラグのおかげで、各行の先頭と末尾にマッチングが行えます。

応用例

ログファイルから特定のエラーメッセージを抽出

log_text = '''[INFO] Server started
[ERROR] File not found
[INFO] Connection established
[ERROR] Disk full'''

pattern = r'^\[ERROR\].*?$'
matches = re.findall(pattern, log_text, re.MULTILINE)

for match in matches:
    print("マッチしたエラーメッセージ:", match)

この例では、`re.MULTILINE`を用いて、ログファイルから特定のエラーメッセージを抽出しています。

HTMLから特定のタグを抽出

html_text = '''
Text 1
Text 2
''' pattern = r'
.*?
' matches = re.findall(pattern, html_text, re.DOTALL) for match in matches: print("マッチしたタグ:", match)

この例では、`re.DOTALL`を用いてHTMLから`

`タグを含む内容を抽出しています。

まとめ

Pythonの`re`モジュールを用いた複数行にわたるパターンマッチングの方法について解説しました。`re.DOTALL`や`re.MULTILINE`フラグを活用することで、より複雑なテキスト解析が可能です。具体的な応用例を通じて、この機能の使い方を理解できたでしょうか。

コメント

コメントする

目次