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