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 :

[REGEX] petit soucis ..


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 53
    Points : 41
    Points
    41
    Par défaut [REGEX] petit soucis ..
    Bonjour,

    j'ai un soucis avec mon expression régulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ^(.*)\.s?(\d{1,2})[ex]?(\d{2})\.
    sur une valeur telle "How.I.Met.Your.Mother.8x16.FR.CaR.zip"

    cela me sort
    => How.I.Met.Your.Mother
    => 8
    => 16

    C'est parfait !
    Mais probleme avec "How.I.Met.Your.Mother.8x12.8x13.FR.CaR.zip"
    => How.I.Met.Your.Mother.8x12
    => 8
    => 13

    j'ai donc fait évoluer ma regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(.*)\.s?(\d{1,2})[ex]?(\d{2})\.(?:\d{1}x\d{2}\.)?
    Mais le problème persiste ... et je sèche

    Un petit lien si vous voulez vous y essayer
    http://regexr.com?33dt1

    Merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 53
    Points : 41
    Points
    41
    Par défaut
    Arf j'ai finalement trouvé une regex qui fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(.*[^s?\d{1,2}(x|e)?\d{2}])\.s?(\d{1,2})[ex]?(\d{2})\.(?:s?(\d{1,2})[ex]?(\d{2})\.)?

  3. #3
    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
    Désolé, mais cette regex ne fait certainement pas ce que tu veux (pas en python, en tout cas*!). Le contenu des classes de caractères (entre crochets []) a sa propre syntaxe, la syntaxe regex “normale” n’y a pas cours… Autrement dit, "[^s?\d{1,2}(x|e)?\d{2}]" signifie «*tout sauf un s, un ?, un \, un d, un {, etc.*»*!

    Ce que tu cherches à faire, c’est un lookahead négatif, mais tu n’en a pas besoin ici, amha un simple opérateur non-glouton devrait suffire*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "^(.*?)\.s?(\d{1,2})[ex]?(\d{2})\.(?:\d{1}x\d{2}\.)?"
    Alors que "(.*)" signifie «*capturer autant de caractère que possible tant que le reste de la regex est satisfaite*» (opérateur glouton), "(.*?)" signifie «*capturer le minimum de caractères nécessaires afin de satisfaire le reste de la regex*» (opérateur non-glouton, obtenu par l’ajout du “?” supplémentaire)*!

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 53
    Points : 41
    Points
    41
    Par défaut
    Tu as complétement raison Bastien !

    Comment j'ai pu passé à côté de ça et me compliquer autant la vie

    Passé une certaine heure, il vaut mieux reporter au lendemain

    Merci

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par mont29 Voir le message
    Ce que tu cherches à faire, c’est un lookahead négatif, mais tu n’en a pas besoin ici, amha un simple opérateur non-glouton devrait suffire*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "^(.*?)\.s?(\d{1,2})[ex]?(\d{2})\.(?:\d{1}x\d{2}\.)?"
    Un multiplicateur non gourmand peut toujours être avantageusement remplacé par une classe négative. Souvent plus véloce.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^([^\d]+)\.(\d{1,2})[ex]?(\d{2})
    Dans ce cas-ci et avec l'exemple donné: de 60% à deux fois plus rapide d'après timeit().
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  6. #6
    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
    Certes… mais cette regex est moins universelle, elle bloquera complètement (pas de match) sur "How.I.Met.Your.Mother.At.6PM.8x16.FR.CaR.zip", par exemple. Donc, il n’y a que deux possibilités, amha*: opérateur non-glouton, ou lookahead négatif (ce qui doit, je pense, revenir au même…). Pas testé les performances, mais l’opérateur non-glouton est bien plus simple à écrire (et à comprendre*!).

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 07/04/2010, 17h51
  2. [RegEx] Petit soucis de regex
    Par viewtifulced dans le forum Langage
    Réponses: 2
    Dernier message: 25/03/2010, 12h05
  3. [RegEx] petit soucis regex (syntaxe)
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 13/06/2009, 15h28
  4. Petit souci AWK et REGEX
    Par DIE dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 19/12/2007, 22h09
  5. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52

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