Это означает, что вы пытаетесь манипулировать тем, что имеет ссылку, но еще не инициализировано. Первое, что нужно сделать, это проверить каждый созданный экземпляр. Используйте контрольные точки, часы, проверяйте свои значения varibale. Следить за трассировкой стека и искать точные строки и столбцы, которые создают проблему
Это будет работать:
>>> 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']
Обратите внимание, что регулярные выражения в порядке, если адреса электронной почты просты - но есть все, что может сломаться. См. этот вопрос для подробного рассмотрения регулярных выражений адреса электронной почты.
Вы можете исправить проблему (\.\w+)+
только для захвата последнего совпадения, сделав это вместо этого: ((?:\.\w+)+)
Это то, что вы ищете:
>>> import re
>>> s="yasar@webmail.something.edu.tr"
>>> r=re.compile("\.\w+")
>>> m=r.findall(s)
>>> m
['.something', '.edu', '.tr']