見出し画像

re.findallで、文字列のグループをタプルで取り出す。

今日は、『つくってマスターPython』の第4章 “文書を処理する” で学んだことをアウトプットします

名前・電話番号・メールアドレスを分解

規則的に入力された文章から「電話番号とメールアドレス」を正規表現のパターンで指定して取り出してみます。

import re

data = '''
太郎 090-(999)-999 taro@yamada.san
花子 080-(888)-888 hanako@flower.shop
幸子 070-(777)-777 sachico@happy.lady
'''

result = re.findall(r'(\S+)\s+([\()\d-]+)\s+([\w.-_]+@[\w.-_]+)', data)

print('*名前')
for item in result:
   print(item[0])
   
print('\n*電話番号')
for item in result:
   print(item[1])

print('\n*メールアドレス')
for item in result:
   print(item[2])
かなり長いパターンが入力されていますが、よく見ると、3つのグループとその間を結ぶ部分に分かれていることがわかります。
3つのグループには、それぞれ名前・電話番号・メールアドレスが取り出されます。

正規表現のパターンでのグループは、()記号で指定するのでしたね。

findallの戻り値

findallでは、パターンに合致した文字列部分から、グループ指定された部分をタプルにまとめたものとして値が得られます。ここでは3つのグループがありますから、これらのグループに合致する3つの文字列がタプルになった値が取り出されます。
探しだしたそれぞれのタプルのリストがfindallで取り出されるのです。

イマイチ理解しづらかったので、IPythonコンソールにて、resultを表示させてみました。

result
Out[14]: 
[('太郎', '090-(999)-999', 'taro@yamada.san'),
('花子', '080-(888)-888', 'hanako@flower.shop'),
('幸子', '070-(777)-777', 'sachico@happy.lady')]

確かに、3つの文字列がタプルになったリストが取り出されていますね。

サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪