IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème expression régulière python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 18
    Par défaut Problème expression régulière python
    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?

  2. #2
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Tu utilises une classe de caractère (les crochets) autour de ton expression, ça, ça ne peut pas marcher (pas de regex dans une classe, uniquement des caractères et des classes ou intervalles de caractères) –*je crois que ce que tu cherches ici, ce sont les parenthèses non-capturantes (qui regroupent une sous-regex, mais sans en capturer le résultat)… De plus, tu t’es mélangé les pinceaux avec les parenthèses optionnelles. Je verrais donc ça comme ça*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    r"[\((\?[aA][tT]\)\?\)|@]"  =>  r"\(?((?:[aA][tT])|@)\)?"
    À noter aussi, sauf erreur de ma part, pas besoin d’échapper les caractères spéciaux genre point, point d’interrogation, etc., dans une classe de caractères –*seules les classes pré-définies par une séquence d’échappement (genre \w, \S, etc.), ainsi que le crochet fermant évidemment, nécessitent le backslash, dans ce cas-là, me semble-t-il.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 18
    Par défaut
    D'accord, merci
    Ta réponse ne correspond pas à ce que je cherche à faire, vu que tu récupères aussi les cas du style truc(@)machin , mais je comprends l'idée (même si comme je l'ai mis dans mon édit, j'ai finalement trouvé comment utiliser l'opérateur '|').

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème expressions régulières
    Par cottcott dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2007, 14h29
  2. Réponses: 3
    Dernier message: 20/04/2007, 14h47
  3. Problème expression régulières
    Par LEK dans le forum C#
    Réponses: 2
    Dernier message: 18/04/2007, 11h40
  4. [RegEx] problème expression régulière
    Par H-bil dans le forum Langage
    Réponses: 4
    Dernier message: 13/02/2007, 15h38
  5. Problème expressions régulières
    Par sozie9372 dans le forum Langage
    Réponses: 3
    Dernier message: 07/06/2006, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo