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 :

ecriture d'une expression regulière


Sujet :

Langage Perl

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 86
    Par défaut ecriture d'une expression regulière
    Bonjour;

    j'ai une ligne de type : data1;data2;data3;data4 (le separateur est tjrs un
    je veux ecrire une expression regulière pour extraire la donnée se trouvant en position 2 (c-a-d data2)
    Précision : ici le 2 c seulement pour ex, la position d'extraction est stockée dans une variable $pos,

    Merci pour vos reponse,

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 86
    Par défaut
    le separateur est tjrs un ";"

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $mon_texte = "data1;data2;data3;data4";
    $ma_position = 2;
    $mon_extraction = [split /;/, $mon_texte]->[$ma_position];
    En gros, tu crées un tableau anonyme constitué de ta chaine splitée, dont tu prend un élément.

    Naturellement, tu peux aussi utiliser une expression régulière à la place du split :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mon_extraction = [$mon_texte =~ /(\w+);(\w+);(\w+);(\w+)/]->[$ma_position];

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 86
    Par défaut
    dans l'expression regulière,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mon_extraction = [$mon_texte =~ /(\w+);(\w+);(\w+);(\w+)/]->[$ma_position];
    si j'ai bien compris, cela implique une connaissance du nombre de champs dans dans ma ligne. Dans mon cas, cette info je ne l'ai pas.
    Comment peut-on le généraliser?

    Merci

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    et bien, ce n'est pas aussi simple que l'usage de split, qui me semble le plus adapté (sauf si le ; est aussi présent après le dernier élément de la ligne).
    Sinon, tu peux peut-être envisager cette regexp :
    J'essaye de suite... ça semble OK.

  6. #6
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Citation Envoyé par radahm Voir le message
    Comment peut-on le généraliser?
    Pourquoi ne pas utiliser le split?
    Pour généraliser il faut utiliser =~ m/([^;]+)/g
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $mon_texte = "data1;data2;data3;data4";
    my @data_list = $mon_texte =~ m/([^;]+)/g;
     
    my $mon_extraction = $data_list[1];
    print $mon_extraction."\n";

    j'ai une ligne de type : data1;data2;data3;data4 (le separateur est tjrs un
    je veux ecrire une expression regulière pour extraire la donnée se trouvant en position 2 (c-a-d data2)
    Précision : ici le 2 c seulement pour ex, la position d'extraction est stockée dans une variable $pos,
    N'oublie pas que la position de data2 dans ton array sera 1 étant donné qu'on commence l'indexation à 0

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 86
    Par défaut
    ça marche bien qd j'ai des données entre 2 ';'
    Mais lorsque j'ai une chaine de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ;;;CODE_A_EXTRAIRE;;
    cela ne fonctionne plus.
    Comment peut-on forcer les caractères vides?

    Merci

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Remplace simplement le + (1 fois ou plus) multiplicateur par * (0 fois ou plus)

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/11/2007, 15h04
  2. [RegEx] Aide sur une expression regulière
    Par zulkifli dans le forum Langage
    Réponses: 1
    Dernier message: 13/03/2007, 15h02
  3. Contraire d'une Expression regulière
    Par aristeas dans le forum Langage
    Réponses: 5
    Dernier message: 08/11/2006, 12h27
  4. [RegEx] aide pour une expression regulière
    Par hugo123 dans le forum Langage
    Réponses: 5
    Dernier message: 24/11/2005, 15h41
  5. ET dans une expression regulière
    Par kesako dans le forum Langage
    Réponses: 4
    Dernier message: 10/11/2005, 12h57

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