Python では正規表現を()を使いグループ化することができます。
例えば携帯番号の最初の3桁とそれ以外を分けるようにマッチした文字列の一部を分離したい場合、
r'\d\d\d-\d\d\d\d-\d\d\d\d' → r'(\d\d\d)-(\d\d\d\d-\d\d\d\d)'
このように正規表現に丸かっこ()を使用すグループ分けします。
import re #reモジュールを呼び出し
a=re.compile(r'(\d\d\d)-(\d\d\d\d-\d\d\d\d)') #re.compileに渡す正規表現を()でグループ化
b=a.search('私の携帯電話番号は090-0000-8888')
print(b.group())
090-0000-8888 #出力結果
この場合、‘090-0000-8888’が出力されます。group() は group(0) と同じで、マッチ全体を返します。
グループ化されているか確認しましょう。
import re #reモジュールを呼び出し
a=re.compile(r'(\d\d\d)-(\d\d\d\d-\d\d\d\d)') #re.compileに渡す正規表現を()でグループ化
b=a.search('私の携帯電話番号は090-0000-8888')
print(b.group(1))
090 #出力結果
2つに分けたグループのうち1つ目が表示されました。
090-0000-8888は下記のように2つのグループに分かれています
group(1) : 090
group(2) : 0000-8888
グループの中身をまとめて取得するために b.group(1,2) を使います。
import re #reモジュールを呼び出し
a=re.compile(r'(\d\d\d)-(\d\d\d\d-\d\d\d\d)') #re.compileに渡す正規表現を()でグループ化
b=a.search('私の携帯電話番号は090-0000-8888')
print(b.group(1,2))
('090', '0000-8888') #出力結果
複数のグループを指定すると、タプルとして返されます。#ここよくわからん笑
今回は正規表現のグループ化を勉強しました。
次回は|を使用し複数のグループとマッチした文字列を取得する方法、エスケープ文字を使用した正規表現の方法を勉強していきます!

コメント