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

Langage Perl Discussion :

Probleme Regexp (2 conditions de manière simultannee)


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut Probleme Regexp (2 conditions de manière simultannee)
    Bonsoir, j'ai un petit probleme a propos des regexp .. j'ai deja fait le tour de pls FAQ mais je n' ai pas trouve la solution (ou je suis passe a cote )

    Mon probleme (pas specifique de perl mais plutot des regexp en general) : j'ai une liste de "mots" (toto1 , toto2 , blabla1 , blabla2 , blabla3 , ... , blabla120 , ... , blablan) et je voudrait n'en recuperer qu'une partie (tous les blabla(x) mais pas blabla5 par exemple) avec une regexp :

    blabla[0-9]+ permet de recuperer l'ensemble des mots blabla(x)
    [^blabla5] permet de ne pas considerer blabla5

    Comment utilise t-on les 2 conditions de manière simultannee (dans une meme regexp) ?

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Par défaut
    [^blabla5] ne fait pas ce que tu crois qu'il fait : il va matcher tout caracter different de l'ensembnle que tu lui donne, sans notion d'ordre. Pour ce que tu cherche a faire il faut utiliser (?!blabla5).

    Mais pour le cas precis que tu decris ici voila la regexp adaptée:
    /blabla[012346789]/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut
    Bon j'aurais du etre plus precis, en fait il y a pls lignes, je recupere un mot cle pour chacune d'elles :

    toto1
    toto2
    blabla1
    blabla2
    blabla3
    ...
    blabla120
    ...
    blablan

    Si une ligne m'interesse (par ex, les blabla(x) mais pas blabla5 (et cela peut varier)), je realise un traitement. L'ideal serait de dire "je considere une partie importante de mon ensemble et je retire ceci" plutot que de dire, je prends ca, ca ,ca, ca , ca et ca .... Il faudrait dc quelquechose de tres flexible.

    Merci

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Par défaut
    alors dans ce cas utilise regexp::list :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      use Regexp::List;
      my @list = qw(blabla1 blabla2);
      my $l  = Regexp::List->new;
      my $re = $l->list2re(@list);
      while (<$fh>) {
        print "ok for $_" if /$re/
      }
    en gros tu construit ta regexp en fonction d'une liste
    tu peux aussi construire cette regexp à la main (un peu moins efficace, en tous cas sur perl < 5.9.5) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      my @list = qw(blabla1 blabla2);
      my $re = join('|', sort map {quotemeta} @list);
      $re = qr/$re/;
      while (<$fh>) {
        print "ok for $_" if /$re/
      }
    et bien sur tu peux constituer ta liste de depart de maniere automatique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my @list = map {"blabla$_"} grep {$_ != 5 && $_ != 7} (1..10);

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut
    Merci pour ta reponse mais ca me parait un peu complique, non ?

    Il n'y a vraiment pas moyen de faire cela directement avec des regexp (et1 si possible) ?
    ex motif1 : "blabla[0-9]+"
    ex motif2 (utilise par la suite en negation) "^blabla5$|^blabla6$"

  6. #6
    Membre éprouvé Avatar de minus
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 153
    Par défaut
    Ca doit etre faisable... mais apres ca depend du resultat que tu souhaite obtenir... si ton code en devient totalement illisible tu n'auras au final aucun gain.

  7. #7
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par perldebutant
    Merci pour ta reponse mais ca me parait un peu complique, non ?

    Il n'y a vraiment pas moyen de faire cela directement avec des regexp (et1 si possible) ?
    ex motif1 : "blabla[0-9]+"
    ex motif2 (utilise par la suite en negation) "^blabla5$|^blabla6$"
    Tu ne pourrais pas te contenter de quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m/blabla(\d+)/ and $1 != 5
    --
    Jedaï

Discussions similaires

  1. [Débutant]problemes avec mes conditions
    Par Rafsky dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2007, 13h02
  2. Probleme avec les conditions If-- Then
    Par visualk dans le forum Delphi
    Réponses: 15
    Dernier message: 24/05/2007, 09h34
  3. [SI] : probleme avec la condition
    Par camzo dans le forum Excel
    Réponses: 2
    Dernier message: 28/03/2007, 11h28
  4. Probleme dans une condition
    Par 12_darte_12 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/02/2006, 12h50
  5. Problème dans une condition
    Par gibet_b dans le forum Linux
    Réponses: 4
    Dernier message: 31/05/2005, 10h19

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