Pythonでマルチラインモードを活用したパターンマッチングの実践

Pythonでのテキスト処理において、正規表現を用いたパターンマッチングは非常に有用なスキルと言えます。特にマルチラインモードを使用すると、複数行にわたるテキストでも効率よくマッチングが行えます。本記事では、Pythonの`re`モジュールを使ってマルチラインモードでのパターンマッチングの方法を具体的なコードとともに解説します。さらに、応用例を2つ紹介し、その運用方法についても詳しく解説します。

目次

マルチラインモードとは

マルチラインモードとは、正規表現で複数行にわたるテキストを処理するモードのことを指します。通常のモードでは、`^`は文字列の先頭、`$`は文字列の末尾とマッチしますが、マルチラインモードでは各行の先頭と末尾にマッチします。

Pythonでの基本的なマルチラインモードの使用方法

Pythonでのマルチラインモードを使う際には、`re`モジュールの`re.MULTILINE`または`re.M`フラグを使用します。

基本的なコード例

import re

# テキストデータ
text = '''apple
orange
banana
'''

# マルチラインモードで先頭にマッチする文字列を検索
result = re.findall(r'^\w+', text, re.MULTILINE)

# 結果の出力
print(result)

この例では、複数行にわたるテキストデータから、各行の先頭にマッチする単語(\w+)を抽出しています。`re.MULTILINE`フラグを使うことで、各行の先頭とマッチします。

このコードの解説

– `re.findall`関数は、マッチしたすべての部分文字列をリストとして返します。
– `^\w+`は、行の先頭(`^`)にマッチする単語(`\w+`)を指定します。
– `re.MULTILINE`フラグを指定することで、複数行に対応します。

応用例1: 複数行にわたる特定のパターンを抽出

# テキストデータ
text = '''apple 1
orange 2
banana 3
'''

# マルチラインモードで先頭にマッチし、数字も抽出
result = re.findall(r'^(\w+) (\d+)', text, re.MULTILINE)

# 結果の出力
print(result)

このコードの解説

– `^(\w+) (\d+)`は、行の先頭で単語と数字がスペースで区切られている場合にマッチします。
– 括弧`()`で囲むことで、マッチした単語と数字を別々に取得できます。

応用例2: 特定の文字列の後ろに続く複数行を抽出

# テキストデータ
text = '''--start--
apple
orange
--end--
'''

# マルチラインモードで特定の区切り文字の後に続くテキストを抽出
result = re.search(r'--start--\n(.+?)\n--end--', text, re.MULTILINE | re.DOTALL)

# 結果の出力
print(result.group(1))

このコードの解説

– `–start–\n(.+?)\n–end–`は、`–start–`と`–end–`で囲まれた部分にマッチします。
– `re.DOTALL`フラグを使用して、`.`が改行にもマッチするようにしています。

まとめ

Pythonの`re`モジュールを使用してマルチラインモードでのパターンマッチングを行う方法を解説しました。基本的な使用法から応用例まで、多角的にこのテクニックを理解することで、テキスト処理の幅が広がるでしょう。

コメント

コメントする

目次