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 :

Lister les occurences de motifs d'une chaîne


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur d'études
    Inscrit en
    Mars 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Mars 2009
    Messages : 43
    Points : 48
    Points
    48
    Par défaut Lister les occurences de motifs d'une chaîne
    Bonjour,

    depuis un petit moment je me retrouve confrontée à un problème qui doit être tout bête, mais étant un peu rouillée en Perl j'avoue ne pas trouver de solutions malgré de nombreuses tentatives.

    Dans la chaîne de caractères suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DR   Ensembl; ENSBTAT00000022411; ENSBTAP00000022411; ENSBTAG00000016846.
    Je cherche à récupérer sous la forme d'une liste tous les motifs commençant par ENS (il y a un doublon, c'est normal, cela vient du fichier dont je dispose, ne cherchons pas à comprendre !). J'ai donc essayé de plusieurs façons, j'ai réussi a avoir un début de réponse avec la fonction map() mais à force de tripatouiller pour améliorer le tout, j'ai peur d'avoir réussi à m'embrouiller.
    Voici la syntaxe que j'utilise pour lister les motifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @ens = map {($_ =~ /(ENS\w+)+/gx) ? $1 : () } $_;
    Le problème c'est que je me retrouve avec une liste ne contenant que la première occurrence du motif, ce qui n'est pas le but recherché.
    J'ai besoin de récupérer les occurrences sous forme de liste pour la suite de mon script (qui lui tourne très bien) dans le but de l'améliorer mais j'avoue que là j'en viens à perdre mon latin. Serais-je passée à côté d'une fonction au niveau des RegEx ?

    Merci d'avance à la ou les personnes qui trouveront la solution !
    Cordialement, Norore.

  2. #2
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 184
    Points : 322
    Points
    322
    Par défaut
    map est utile sur des listes, non pas sur des scalaires.
    Une simple expression régulière suffit amplement pour ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    my $s = "DR   Ensembl; ENSBTAT00000022411; ENSBTAP00000022411; ENSBTAG00000016846.";
    my @ens = $s=~/(ENS[\^s]+)/g;
    print join("\n",@ens);

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $chaine = "DR   Ensembl; ENSBTAT00000022411; ENSBTAP00000022411; ENSBTAG00000016846.";
    my @ens = $chaine =~/(ENS\S+)/g;
    print "@ens";
    ENSBTAT00000022411; ENSBTAP00000022411; ENSBTAG00000016846.

  4. #4
    Membre du Club
    Femme Profil pro
    Ingénieur d'études
    Inscrit en
    Mars 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Mars 2009
    Messages : 43
    Points : 48
    Points
    48
    Par défaut
    Tout simplement... Merci pour vos réponses, elles m'ont bien aidée !

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

Discussions similaires

  1. Effacer les X dernier caractère d'une chaîne
    Par Altrensa dans le forum Excel
    Réponses: 4
    Dernier message: 17/07/2007, 11h03
  2. Lister toutes les possibilités de casse d'une chaîne
    Par nerok dans le forum Windows Forms
    Réponses: 20
    Dernier message: 15/06/2007, 11h11
  3. Réponses: 5
    Dernier message: 30/10/2006, 13h37
  4. Gérer les guillemeets à l'intérieur d'une chaîne
    Par LAGARDETTE dans le forum ASP
    Réponses: 5
    Dernier message: 27/06/2006, 22h08
  5. Lister les fichiers du répertoire contenant une applet
    Par uncle bobo dans le forum Applets
    Réponses: 1
    Dernier message: 05/05/2006, 16h55

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