Pythonで正規表現のグループ化とキャプチャをマスターする方法

この記事では、Pythonでの正規表現におけるグループ化とキャプチャについて詳しく解説します。具体的なコード例とその解説、応用例を含めています。

目次

はじめに

正規表現は、テキストデータを処理する際に非常に有用なツールです。特にグループ化とキャプチャは、複雑なテキスト操作を簡潔に行うために不可欠です。この記事では、Pythonの`re`モジュールを使用して、これらの概念を理解し実践的な使い方をマスターする方法を学びます。

正規表現とは

正規表現(Regular Expression)は、文字列の検索や置換を行う際のパターンを表すための表記法です。Pythonでは`re`モジュールを用いて正規表現が利用できます。

基本的な構文

正規表現には様々な構文がありますが、ここでは主に`()`を用いたグループ化に焦点を当てます。

import re

pattern = r"(ab)+"
text = "ababab cd abab"
result = re.findall(pattern, text)
print(result)  # ['ab', 'ab']

この例では、`ab`が1回以上続くパターンを検索しています。ただし、`findall`メソッドはグループ化された最後のマッチ(’ab’)のみを返します。

グループ化とキャプチャ

基本的なグループ化

基本的なグループ化は、正規表現内で`()`を使用することで行います。

# グループ化の基本例
pattern = r"(a[bc]+)+"
text = "abcbcbac acbacb"
result = re.findall(pattern, text)
print(result)  # ['abcbcb', 'acbacb']

キャプチャの使用

キャプチャを使用すると、グループ化した部分文字列を個別に取得できます。

pattern = r"(a(b)c)+"
text = "abc abc ac abc"
result = re.findall(pattern, text)
print(result)  # [('abc', 'b'), ('abc', 'b'), ('abc', 'b')]

ここで、`(‘abc’, ‘b’)`という形式で、全体と内部グループがキャプチャされていることがわかります。

応用例

日付の抽出

日付の形式が”年/月/日”である文字列から日付を抽出する例です。

pattern = r"(\d{4})/(\d{2})/(\d{2})"
text = "今日は2023/10/17、明日は2023/10/18です。"
result = re.findall(pattern, text)
print(result)  # [('2023', '10', '17'), ('2023', '10', '18')]

HTMLタグの抽出

HTMLから特定のタグを抽出する例です。

pattern = r"<(a|img)[^>]*>"
text = 'リンク'
result = re.findall(pattern, text)
print(result)  # ['a', 'img']

まとめ

正規表現でのグループ化とキャプチャは、テキスト処理において非常に有用です。この記事で紹介した基本的な概念と応用例を理解することで、更に高度なテキスト処理が可能になります。

コメント

コメントする

目次