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 :

probleme de Regex


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 42
    Par défaut probleme de Regex
    Bonjour,
    (pardon si je poste pas dans le bon forum mais j'ai pas trouvé de catégorie prog tout cours en python j'ai vu prog scientifique et vu que ça traite d'un probleme de science...)

    Voila je bloque sur un parsing depuis quelques temps.

    exemple :
    """zertrevsd é&"'(13'"é'><>>>sr"ér "tzf [Bos Taurus]rezrezr zerezrezcsefves erezr [Candidas Albicans]<\>

    ere [Homo sapiens] &&&& [Homo sapiens sapiens]
    """

    Je souhaite récupérer les éléments entre crochets :
    Avec ce pattern le résultat n'est pas toujours bon :
    re.compile(".*?\[(\w+\s+\w+)\W+.+\].*?")
    ou
    re.compile(".*?\[(\w+\s+\w+)\].*?")
    Le probleme c'est que je ne sais pas combien de mot il peut y avoir entre parenthése ... par exemple pour le dernier 3 mots du coup le pattern ne marche plus car je peux avoir [aa ggg] ou [aa ggg hhhh] ou [a ere ere fdre vdfrdg]

    Je pense avoir essayer une bonne centaine de solution mais ne trouve pas un pattern robuste qui récupère toutes les solutions

    Je vous remercie pour votre attention et votre aide.

    Mister

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Par défaut
    Salut,

    Ton expression rationnelle me semble trop complexe.
    Essaye ceci par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import re
     
    a_chercher = """zertrevsd é&"'(13'"é'><>>>sr"ér "tzf [Bos Taurus]rezrezr zerezrezcsefves erezr [Candidas Albicans]<\>
     
    ere [Homo sapiens] &&&& [Homo sapiens sapiens]
    """
     
    cherche = re.compile(r'(?s)(\[(.*?)\])')
    for el in cherche.finditer(a_chercher):
        print "Dans %s --> trouve %s"%( el.group(1),el.group(2))
    Le "(?s)" dans la regexp est simplement un raccourci pour y placer un drapeau qui considère que les espaces doivent aussi être trouvés dans tes balises [...].

    Tu peux le remplacer par "re.compile(r'(\[(.*?)\])', re.DOTALL)"

    Note aux admins : la coloration syntaxique à l'air de mer... un peu sur ce genre de chaînes Python.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 42
    Par défaut
    Merci beaucoup ça marche c'est super. Encore merci beaucoup !!

    Mister

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 42
    Par défaut
    JE vais etre encore un peu chiant. Si je veux avoir un pattern qui ne prenne que ce qu'il y a entre parenthèse ET qui comment par une majuscule.
    Par exemple
    [Bos Taurus] -> on prend
    [Bos Taurus Taurus] -> on prend
    [sequence alpha6] -> on prend pas car pas de majuscule sur la premiere mettre du premier mot

    Excusez moi de vous embettez encore.

    Merci pour aide,

    Mister

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Par défaut
    Voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import re
     
    a_chercher = """zertrevsd é&"'(13'"é'><>>>sr"ér "tzf [Bos Taurus]rezrezr zerezrezcsefves erezr [Candidas Albicans]<\>
     
    ere [Homo sapiens] &&&& [Homo sapiens sapiens]
     
    homo [Bos Taurus]
    pedalo [Bos Taurus Taurus]
    auto [sequence Alpha6]
    philo [sequence alpha8]
    """
     
    cherche = re.compile(r'(\[(?P<trouver>[A-Z].+?)\])')
    for el in cherche.finditer(a_chercher):
        print "Trouve %s"%( el.group("trouver"))
    Petite rectification : le "(?s)" dans la regexp précédente n'était là que pour matcher une fin de ligne éventuelle, pas un espace.

    J'ai ajouté un groupé nommé "trouver", c'est ainsi plus simple de t'y retrouver.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 42
    Par défaut
    Ouahouu tu viens de m'apprendre un super truc avec les groupes !!! On peut gérer des groupes dans un même pattern !!! C'est génial ça. Ca va m'éviter de faire 50 re.compile ^^ Et génial pour la majuscule ça marche du tonnerre !!

    T'as un site à me conseiller pour bien comprendre et facilement les regex car tout ce ceux que j'ai trouvé c'est des copier coller de définition sans exemple pas facile à comprendre.

    Merci énormément c'est vraiment super sympa merci !!!

    Mister

Discussions similaires

  1. Probleme avec REGEX sous IE
    Par Death83 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 18/07/2006, 20h02
  2. [RegEx] Probleme de Regex
    Par keil dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2006, 14h14
  3. probleme de regex! (debutant)
    Par kriskikout dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2006, 23h00
  4. [langage] autre probleme de regex
    Par Ludo167 dans le forum Langage
    Réponses: 3
    Dernier message: 18/08/2004, 17h01
  5. [langage] probleme de regex
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 18/08/2004, 15h36

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