正規表現を用いた電話番号とメールアドレスの抽出について
以下のコードについての質問です。「退屈なことはpythonにやらせよう」の7章を参考に、コピーしたテキストから電話番号とメールアドレスを抽出してリストにまとめるコードなのですが、
for groups in phone_regex.findall(text):
この部分では、いったいgroupsはどういったものに変化していくのでしょうか。
(for i in range(0,100)
の場合 i
は 0-99に変化する という感じ)
また どうして
phone_num = '-'.join([groups[1],groups[3],groups[5]])
は group(1)
ではなく groups[1]
(sがつく)のでしょうか。
import pyperclip as pcl
import re
phone_regex =re.compile(r'''(
(\d{1,4}|\(\d{1,4}\)) #市外局番
(\s|-) #区切り
(\d{1,4}) #市内局番
(\s|-) #区切り
(\d{3,4}) #加入者番号
(\s*(ext|x|ext.)\s*(\d{2,5}))? #内線番号
)''',re.VERBOSE)
email_regex = re.compile(r'''(
[a-zA-Z0-9._%+-]+ #ユーザー名
@
[a-zA-Z0-9.-]+ #ドメイン名
(\.[a-zA-Z]{2,4}) #.after
)''',re.VERBOSE)
#クリップボードのテキストを検索する
text = (pcl.paste())
matches = []
for groups in phone_regex.findall(text):
phone_num = '-'.join([groups[1],groups[3],groups[5]])
if groups[8] != '':
phone_num += ' x' + groups[8]
matches.append(phone_num)
for groups in email_regex.findall(text):
matches.append(groups[0])
if len(matches)>0:
pcl.copy('\n'.join(matches))
print('コピーしました')
print('\n'.join(matches))
else:
print('電話番号やメールアドレスは見つかりませんでした')