この記事ではpythonの正規表現グループの使い方について解説します。
まず正規表現に関しては忘れっぽい人のための正規表現チートシートという記事で詳しく書かれていますのでそちらを参照されるのがよいかと思います。
筆者はpythonの正規表現グループを理解するのにかなり苦しみました。どいうものか書いていきます。
pythonの正規表現 とは
まず、グループを作成するには、丸括弧 ()
を使用します。グループ内のパターンは、そのままの形でマッチングされます。また、グループは番号付けされ、\1、\2、\3 のように参照することができます。(¥マークになっていますが実際のコード上ではバックスラッシュが使われます)
このグループ番号ですが主にグループの置換で使用します。これより詳細に解説していきます。
正規表現グループの取得(キャプチャ)
正規表現において、グループは特定の部分を取り出すために使われます。具体的には、グループを使ってマッチした部分を抽出することができます。これは、マッチした部分を「取得する」、もしくは「捕捉する」と言い表すことができます。これがグループのキャプチャです。
コードはこれです。
import re
text = "名前:山田太郎, 年齢:30歳"
pattern = r"名前:(\w+), 年齢:(\d+)歳"
match = re.match(pattern, text)
if match:
name = match.group(1) # 名前の部分を取得する
age = match.group(2) # 年齢の部分を取得する
print("名前:", name) # 出力: 名前: 山田太郎
print("年齢:", age) # 出力: 年齢: 30
上記の例では、re.match()
を使ってパターンとテキストをマッチさせ、名前と年齢の部分を「取得」しています。match.group(1)
は1番目のグループ(名前)を取得し、match.group(2)
は2番目のグループ(年齢)を取得します。
これはただ単に正規表現グループを取得しているだけですが、次はグループの置換をやってみましょう。
正規表現グループの置換
re.sub()
メソッドを使用して、正規表現パターンにマッチした部分を置換する際に、グループの値を参照することができます。例えば、文字列内のハイフンで区切られた日付を逆順に並び替える場合に、グループを利用することができます。
import re
date_string = "2023-07-06"
pattern = r"(\d{4})-(\d{2})-(\d{2})"
reversed_date = re.sub(pattern, r"\3-\2-\1", date_string)
print(reversed_date) # 出力: 06-07-2023
reversed_date = re.sub(pattern, r”\3-\2-\1″, date_string)という部分でグループ番号を使用して日付文字列を日にちから開始するように置換しています。
まとめ
以上のように、グループを使用することで正規表現パターン内の特定の部分をキャプチャしたり、置換時に利用したりすることができます。
コメント