Используйте необработанную строку
regex = r'^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$'
Обратите внимание на префикс r
. Это гарантирует, что \
не будет интерпретироваться как возможные escape-последовательности, а просто как \
.
Поскольку \
имеет смысл в регулярных выражениях, это хорошая привычка в python - всегда использовать необработанные строки для регулярных выражений . (См. Документацию re
)