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 :

pattern d'expressions régulières = X OU VIDE


Sujet :

Python

  1. #1
    Membre averti Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Points : 329
    Points
    329
    Par défaut pattern d'expressions régulières = X OU VIDE
    Bonjour, je met en place un tableau de regEx comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    self.rules = {
       #00/00/0000
       'date': r"([0-9]{2}\/){2}[0-9]{4}",
    }
    et ensuite je l'appelle comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    regEx = rules['date']
    bool(re.match(regEx,unicode(value))
    Mon problèmes :
    Je souhaite faire une sorte de OU, càd match ce pattern OU vide.
    Tout naturellement j'ai pensé à faire ça


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    				
    self.rules = {
       #00/00/0000 ou  'VIDE' 
       'date': r"(([0-9]{2}\/){2}[0-9]{4}})*",
    }
    Mais ça ne fonctionne pas, ça me donne 1 avec n'importe quoi.
    Je n'arrive pas à cibler/formuler mon soucis sur google!
    merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    Pourtant bool() semble faire ce que tu demandes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
    [GCC 4.4.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import re
    >>> patt = re.compile(r'([0-9]{2}\/){2}[0-9]{4}')
    >>> bool(re.match(patt, "09/02/2012"))
    True
    >>> bool(re.match(patt, "09/fev/2012"))
    False
    >>>
    C'est pas cela que tu veux ?

  3. #3
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 931
    Points : 7 340
    Points
    7 340
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    result = re.match(regEx,unicode(value)
    if not result:
        result = 'VIDE'
    ?

  4. #4
    Membre éprouvé

    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
    Points : 1 273
    Points
    1 273
    Par défaut
    Apparemment, si on veut matcher une chaîne vide, il faut le dire explicitement… La regex suivante marche, je pense*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    r'(([0-9]{2}\/){2}[0-9]{4})|^$'

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Ah oui, d'accord je ne l'avais pas compris comme ça.

    Utiliser les instructions/méthodes de python avant les regex pour simplifier celles-ci me paraît plus judicieux, à tout le moins plus lisible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if not chain or re.match(pattern, chain):
        ... #OK

  6. #6
    Membre averti Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Points : 329
    Points
    329
    Par défaut
    Merci à tous, et particulièrement @mont29. Cela marche, j'avais bien la piste du "^" mais je n'y étais pas arrivé.

    @VinsS
    En temps normal biensur, seulement, là pour le coup j'utilise un "moteur" d'expressions régulières, l'appel doit être neutre, certaines autres regEx n'accepteront pas les chaines vides !

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

Discussions similaires

  1. les patterns et les expressions régulières
    Par metwa dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 09/06/2009, 19h17
  2. Expression régulière pour chaine vide
    Par Flackou dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 09/06/2009, 15h52
  3. [Pattern] Des expressions qui ne jouent pas à la régulière!
    Par Ravaka dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 21/04/2007, 15h28
  4. Expressions régulières : cibler du texte entre ligne vide, {
    Par lrbabe dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 27/02/2007, 10h49
  5. Expression régulière pattern
    Par viscere dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 30/05/2006, 13h47

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