Bonjour à tous!

Alors, voici mon problème:
Je suis depuis peu un cours online intitulé "Natural language processing", et celui-ci nous oblige à coder en python ou en Java pour pouvoir soumettre des réponses aux "programming assignments". Et ça fait un bon bout de temps que je n'ai pas touché à ce langage ^^.
Bref, je désire récupérer des emails dans des fichiers donnés en test (plus ou moins tordus), mais je galère quelque part:
Voici mon pattern :
'(\w[\w\.-]* *)[\((\?[aA][tT]\)\?\)|@]([\w \.-]+)\.-*[eE]-*[dD]-*[uU]-*'

Mon problème se situe à cet endroit:
[\((\?[aA][tT]\)\?\)|@]

En fait, j'aimerais que l'email soit récupéré si @ est remplacé par un (at) ou (aT) ou at ou (AT etc... Mais je pense que je dois avoir un problème de syntaxe quelque part, vu que les emails que je récupérais avec un simple '(\w[\w\.-]* *)@([\w \.-]+)\.-*[eE]-*[dD]-*[uU]-*' ne sont même plus prises en compte... J'ai cru comprendre qu'entre les crochets, il fallait utiliser des antislash pour les caractères spéciaux pour qu'ils soient comptés comme tels, mais je ne sais vraiment pas d'où vient le problème.

Je ne demande pas à ce qu'on me donne la réponse directement au problème donné en exercice, je veux juste comprendre un point du langage python concernant les regexp, donc pas besoin de "On n'est pas là pour faire tes devoirs".

Merci d'avance!

Ps: Si d'autres suivent le même cours, ne pensez pas que ce sera ma soumission, j'ai pas encore fini de vérifier tous les cas.

Edit: j'ai trouvé comment faire avec les ((truc)|(machin)), mais juste pour vérifier, on peut faire autrement?