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 :

problème expréssion régulière


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut problème expréssion régulière
    bonjour,

    * Cela fait un moment que je bloque sur une expression régulière:
    fichier départ:
    bt4ctg_0001 blastx match 1153 3455 1e-132 + ID=19588;target=FG10596.1+15+877;target_description=Fg hypothetical protein

    fichier résultat:
    QUERY=bt4ctg_0001
    HIT=FG10596.1
    HIT_MATCH_LENGTH=863

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    open(SEQ,"< test.fa")or die("Impossible de lire dans le fichier final $!");
     
    while ( my $seq = <SEQ> ) {
        if (my $seq =~ /^bt4ctg_0001\tblastx\tmatch\t([0-9]+)\t([0-9]+)\t(.+)\t(.+)\tID=(.+);target=(.+)+([0-9]+)+([0-9]+);target_description=(.+)$/){
     	my $hit_match_length=$9-$8+1;
    	print( "QUERY=$1\nHIT=$7\nHIT_MATCH_LENGTH=$hit_match_length\n");
     
        }
    }
    close(SEQ);
    Si vous pouvez m'aider; merci

  2. #2
    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
    Quand tu as un problème de ce style, essaye toujours de réduire ton expression régulière jusqu'à ce qu'elle n'échoue plus. Tu peux alors identifier d'après la dernière suppression, ce qui a posé problème.
    Dans ton cas particulier ici présent, pourquoi ne pas commencer par découper la ligne en éléments de tableaux séparés par une tabulation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($QUERY, @infos) = split /\t/, $seq;
    Puis à appliquer des expressions régulières plus simples sur chacun des éléments du tableau @infos qui te sont utiles ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bonjour,



    Il y a plusieurs choses qui ne vont pas dans ta RE:





    ([0-9]+)\t([0-9]+)\t(.+)\t(.+)\tID=(.+)
    il y a trop de groupes définis avant ID=(.+)
    il y a 3 nombres avant ID=(.+) , et non pas 4





    \t ne signifie pas “blanc“ , mais tabulation
    S’il n’y a pas de tabulation dans ta chaîne explorée, et d’après ce que tu postes il n’y en a pas, la présence de \t dans la RE suffit à faire foirer le matching





    tu as oublié les parenthèses autour du nom qui doit se retrouver dans QUERY






    target=(.+)+([0-9]+)+([0-9]+)
    est faux parce que + est un métacaractère
    Il faut écrire
    target=(.+)\+([0-9]+)\+([0-9]+)





    Je pense que ceci devrait aller:


    /^(\w+) [^ ]+ match (\d+) (\d+) ([-+\d.e]+) \+ ID=([^;]+);target=([^+]+)\+(\d+)\+(\d+);target_description=(.+)$/

    En Python, ça me sort
    ('bt4ctg_0001', '1153', '3455', '1e-132', '19588', 'FG10596.1', '15', '877', 'Fg hypothetical protein')

    Si tu n’a pas besoin de tous les groupes, ceci marche aussi:

    /^(\w+) [^ ]+ match [^;]+;target=([^+]+)\+(\d+)\+(\d+);target_description=(.+)$/

    ('bt4ctg_0001', 'FG10596.1', '15', '877', 'Fg hypothetical protein')

Discussions similaires

  1. Problème expressions régulières
    Par cottcott dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2007, 14h29
  2. Réponses: 3
    Dernier message: 20/04/2007, 14h47
  3. Problème expression régulières
    Par LEK dans le forum C#
    Réponses: 2
    Dernier message: 18/04/2007, 11h40
  4. [RegEx] problème expression régulière
    Par H-bil dans le forum Langage
    Réponses: 4
    Dernier message: 13/02/2007, 15h38
  5. Problème expressions régulières
    Par sozie9372 dans le forum Langage
    Réponses: 3
    Dernier message: 07/06/2006, 15h13

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