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`フラグを活用することで、より複雑なテキスト解析が可能です。具体的な応用例を通じて、この機能の使い方を理解できたでしょうか。
コメント