以下のコードについての質問です。「退屈なことは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('電話番号やメールアドレスは見つかりませんでした')