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 :

Expression reguliere


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de crochepatte
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 206
    Par défaut Expression reguliere
    Bonjour, voila j'aimerai trouve une expression reguliere pour ce type d'expression: il s'agit de repetition d'une à plusieurs lettres d'un alphabet de 4 lettre (A,T,G,C) dans une sequence.

    au debut je pensai à /[ATGC]{min,}/, mais en apres reflexions (et quelques tests ) je me suis appercu que c'etait pas adapté a ce que je voulais.

    donc j'ai essayé /([ATGC]{1,4}){min,}/ pour des repetitions de taille 1 à 4 ... mais ca marche pas non plus

    Quelqu'un aurait une idée?

  2. #2
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Une solution (bourrine) pourrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sequence =~m/(A{4,}|C{4,}|T{4,}|G{4,})/gi);
    Par exemple, pour reperer toutes les répétitions d'au moins quatre A, C, T ou G.

    Une meilleure solution consisterait à faire vérifier, par le moteur d'expressions rationnelles, que le caractère qui matche actuellement est bien le même que le précédent ... Mais j'ai toujours eu du mal avec les "look-ahead" et les "look-behind" ... Il faudra que je m'y mette sérieusement, un jour ...

  3. #3
    Membre confirmé Avatar de crochepatte
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 206
    Par défaut
    Oui c'est ce que j'ai fait en attendant pour les motifs de 1,2 et 3 lettre mais maintenant je dois passer a 4 lettre et me tapper toutes les possibilité (soit a peu pres 4! (mois les motifs redondant AAAA par ex) ca me parait lourd, mais je vais voir les look ahead, je connaissait pas...
    Merci du conseil

  4. #4
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    J'ai peut être mal compris la question, car mon expression (bourrine) est destinée à trouver les motifs redondants ...

    S'il s'agit d'identifier les motifs de 4 lettres, potentiellement différentes entre elles, mais répétés, ceci peut être mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @sequence=($a=~m/([ACTG]{4,}).*\1/gi)
    Testé comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    perl -e '$a="ATCGATCGAAATCGAGACCCGGAGTTAGAGGCCCGAGACCTG";
    @tab=($a=~m/([ACTG]{4,}).*\1/gi);$,="\n";print @tab;'
    Il retourne ATCGA et GACC ... Ce qui n'est pas faux, mais peut poser un problème d'alignement. En effet ... le motif GAGACC est répété et pourrait nous interesser, mais il est éliminé par le match de son GA initial dans le ATCGA ...

  5. #5
    Membre confirmé Avatar de crochepatte
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 206
    Par défaut
    Excuse j'ai pas du etre clair, mais le motifs doit se repeter a la suite du genre


    ......ATCATCATCATCATAC.... -> motif ATC repeté
    ......ATATATATATATATAT.... -> motif AT répété

    donc je disai que j'ai deja enuméré tous le motifs possible de 1,2,3 lettres mais bon ca va etre long de faire tous les motifs de 4 lettres et puis peut etre 5

    Voila

  6. #6
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Citation Envoyé par crochepatte
    Excuse j'ai pas du etre clair, mais le motifs doit se repeter a la suite du genre


    ......ATCATCATCATCATAC.... -> motif ATC repeté
    ......ATATATATATATATAT.... -> motif AT répété

    ...
    Bah ... il suffit de retirer le .* de mon motif, entre la fermeture de parenthèse et le \1 pour demander que les répétitions soient voisines, et pas séparées par n'importe quoi.

    Bien sûr, entre accolades, tu peux fixer la longueur de ton motif à répétitions.

    Maintenant, si tu veux obtenir la chaine résultant des répétitions, et pas le motif se répètant, l'expression est différente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @repets=($sequence=~m/(([AC{2,4})\2)/gi);
    Ceci fournira, dans le tableau repets, aux indices pairs (0, 2, 4, 6, ...) les suites de répétitions (chaine "ATCATCATCATC" par exemple), et aux indices impairs suivants (1, 3, 5, 7) le motif élémentaire répété (chaine "ATC" dans l'exemple donné ci-dessus).

    Dans le code donné ci-dessus, on prend les motifs élémentaires d'une longueur de 2 à 4 bases.

    Bon courage.

  7. #7
    Membre confirmé Avatar de crochepatte
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 206
    Par défaut
    Merci beaucoup, encore une fois tu as resolu un probleme...

    Et ben moi qui croyai etre fort en expression reguliere, je ne sais meme pas ce que \1 veut dire ... bon je vais en prendre de la graine


    Merci encore

  8. #8
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Citation Envoyé par crochepatte
    je ne sais meme pas ce que \1 veut dire ...
    \1, dans la première volée de // d'une expression rationnelle fait référence au premier motif mémorisé (celui mémorisé par la paire de parenthèses dont la parenthèse ouvrante a été rencontrée la première). Cela correspond au $1 de la deuxième volée de // lorsque l'on fait une substitution.

    Selon la même logique, \2 désigne le second motif mémorisé, \3 le troisième, etc.

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

Discussions similaires

  1. [langage] [Expression][Régulière] motif
    Par Cyspak dans le forum Langage
    Réponses: 4
    Dernier message: 23/09/2003, 14h24
  2. [langage] [debutant] expression reguliere
    Par toto_titi dans le forum Langage
    Réponses: 3
    Dernier message: 01/07/2003, 09h45
  3. Réponses: 2
    Dernier message: 16/06/2003, 15h15
  4. [langage] surement une expression régulière...
    Par armada dans le forum Langage
    Réponses: 5
    Dernier message: 30/05/2003, 17h06
  5. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 16h14

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