Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    mars 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 49
    Points : 14
    Points
    14

    Par défaut [REGEX] petit soucis ..

    Bonjour,

    j'ai un soucis avec mon expression régulière :
    Code :
    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?(\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
    Candidat au titre de Membre du Club
    Inscrit en
    mars 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 49
    Points : 14
    Points
    14

    Par défaut

    Arf j'ai finalement trouvé une regex qui fonctionne

    Code :
    ^(.*[^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 Expert

    Homme Profil pro Bastien Montagne
    Diverses et multiples
    Inscrit en
    mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Nom : Homme Bastien Montagne
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : mai 2008
    Messages : 662
    Points : 1 153
    Points
    1 153

    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?(\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)*!
    Incantation : Méchant forum, arrête de transformer toutes mes espaces insécables en astérisques

  4. #4
    Candidat au titre de Membre du Club
    Inscrit en
    mars 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 49
    Points : 14
    Points
    14

    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 Expert
    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 102
    Points
    1 102

    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?(\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 :
    ^([^\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 Expert

    Homme Profil pro Bastien Montagne
    Diverses et multiples
    Inscrit en
    mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Nom : Homme Bastien Montagne
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : mai 2008
    Messages : 662
    Points : 1 153
    Points
    1 153

    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*!).
    Incantation : Méchant forum, arrête de transformer toutes mes espaces insécables en astérisques

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •