Это будет работать:
>>> regexp = r"[\w\.]+@(\w+)(\.\w+)?(\.\w+)?(\.\w+)?(\.\w+)?(\.\w+)?"
>>> email_address = "william.adama@galactica.caprica.fleet.mil"
>>> m = re.match(regexp, email_address)
>>> m.groups()
('galactica', '.caprica', '.fleet', '.mil', None, None)
Но оно ограничено максимум шестью подгруппами. Лучший способ сделать это:
>>> m = re.match(r"[\w\.]+@(.+)", email_address)
>>> m.groups()
('galactica.caprica.fleet.mil',)
>>> m.group(1).split('.')
['galactica', 'caprica', 'fleet', 'mil']
Обратите внимание, что регулярные выражения хороши, если адреса электронной почты просты, но есть множество вещей, из-за которых это сломается. См. этот вопрос для подробной обработки регулярных выражений адресов электронной почты.