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 :

[langage] expression régulière combinée à index


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 [langage] expression régulière combinée à index
    Bonjour,

    J'interroge ma base de donnée et j'y recherche la séquence de mon amorce dans une séquence. cela fonctionne très bien pour une amorce unique. Maintenant, j'aimerais pouvoir y rechercher des séquences d'amorces dégénérées.

    Voici ma séquence à trouver ggagaaRgttcacgttgaYat mais Perl peut il reconnaitre le R (=a ou g) et le Y (=t ou c).
    En fait j'ai 4 séquences différentes à rechercher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            my ($AmorceSens1)="ggagaaGgttcacgttgaTat";
            my ($AmorceSens2)="ggagaaAgttcacgttgaCat";
            my ($AmorceSens3)="ggagaaGgttcacgttgaCat";
            my ($AmorceSens4)="ggagaaAgttcacgttgaTat";
    my($s)=index(@row->[1],'GGAGAAAGTTCACGTTGACAT');

    @row->[1] contient ma séquence entière d'ADN
    GGAGAAAGTTCACGTTGACAT est une des 4 amorces à trouver


    Je peux y parvenir en y faisant 4 recherches mais serait il possible de
    - soit dire à BioPerl que je travaille sur de l ADN afin qu'il sache à quoi correspondent mon R et mon Y
    - soit créer une expression régulière dans ma recherche d'index pour qu'il recherche un A ou un G et ensuite un C ou un T.

    J'aimerais aussi savoir si on peut la recherche insensible à la casse (majuscule et minuscule). Je dois utiliser l'option i (/gi).

    Est-il correcte d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($AmorceSens)=~"ggagaa[A,G]gttcacgttga[T,C]at/gi";


    Mon programme m'indique aussi que j'utilise une array sans y mettre le @
    "using an array as deprecated "
    Pourtant, j'ai bien mis le @ à row, il m'indique en erreur ma ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my($s)=index(@row->[1],'TTAATTGAACAAAAGAGTTA');
    Merci beaucoup,

    Jasmine,

  2. #2
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Bonjour.

    Ah, la bioinformatique... Un domaine que j'aurais bien aimé étudier... Tu as de la chance d'en faire
    Pour répondre à ta question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($AmorceSens)=~"ggagaa[A,G]gttcacgttga[T,C]at/gi";
    N'est pas correct. Déjà, je ne comprend pas pourquoi tu utilises des guillemets dans ta regex. Ensuite, ça ne veut pas dire grand chose...

    L'opérateur bind =~ lie une expression à une regex. C'est à dire qu'il faudrait normalement que $AmorceSens contienne la chaîne à laquelle tu veux appliquer la recherche. Or ce n'est pas possible puisque tu viens d'initialiser ta variable avec my...
    Ou alors, ce que tu veux faire, c'est entrer dans $AmorceSens la regex que tu voudras utliser. Dans ce cas, fais comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $AmorceSens = 'ggagaa[A,G]gttcacgttga[T,C]at/g';
    Mettre des parenthèses autour de $AmorceSens signifie que tu souhaites une interprétation en contexte de liste, or une chaîne de caractère est un scalaire.

    Ensuite, fais comme ceci pour utiliser ta regex sur une séquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sequence =~ m/$AmorceSens/ #retourne 0 ou 1

    Ensuite, row[1] est un tableau ou une chaine de caractère ? Si c'est comme je le pense une chaine de caractère (la séquence en question), alors il faut mettre un $ comme sigil et non une @ : $row[1].

    J'espère avoir répondu à tes questions. Si ce n'est pas le cas, dit le

  3. #3
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Citation Envoyé par Woufeil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $AmorceSens = 'ggagaa[A,G]gttcacgttga[T,C]at/g';
    Ce serait pas plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $AmorceSens = 'ggagaa[A,G]gttcacgttga[T,C]at';
    sans le "/g" à la fin ?

  4. #4
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Euh, si, tu as tout à fait raison, j'y avais pas fait attention

  5. #5
    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
    Merci beaucoup, je vais essayer.

    En effet j'ai une array @row et $row[0] est un scalaire. Je vais changer, merci.

    Et pour être insensible à la casse dans une recherche d'index comment puis-je faire? Est ce aussi gi comme dans les expressions régulières?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $AmorceSens='ggagaa[A,G]gttcacgttga[T,C]at';
    et pour avoir l'index de cette séquence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my($s)=index($row->[1], $AmorceSens); #$row->[1] contient une grande séquence
    Merci pour votre aide.

    Jasmine,

  6. #6
    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
    pour etre insensible à la casse avec autre chose qu'une regexp le mieux est de tout passer en minuscules pour le test (à la fois ce que tu cherche et ce dans quoi tu le cherche), avec lc()

  7. #7
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Citation Envoyé par Jasmine80
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my($s)=index($row->[1], $AmorceSens); #$row->[1] contient une grande séquence
    Encore une fois, je ne comprend pas pourquoi tu utilises des parenthèses pour déclarer ta variable $s. index retourne un nombre, donc un scalaire. Tu ne dois donc pas mettre les parenthèses, qui forcent le contexte de liste.
    my $var et my ($var) sont deux expression différentes ! Teste ceci pour t'en rendre compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my @tab = ("Elem1", "Elem2", "Elem3");
    my $var1 = @tab;
    my ($var2) = @tab;
    print "var1 vaut $var1 ; var2 vaut $var2";
    Sinon, comme le dit pospos, met tout en miniscule pour être insensible à la casse

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

Discussions similaires

  1. [langage] [expression reguliere] : syntaxe
    Par arcane dans le forum Langage
    Réponses: 8
    Dernier message: 25/09/2003, 13h03
  2. [langage] [Expression][Régulière] motif
    Par Cyspak dans le forum Langage
    Réponses: 4
    Dernier message: 23/09/2003, 14h24
  3. [langage] expression regulier et test
    Par toto_titi dans le forum Langage
    Réponses: 5
    Dernier message: 16/07/2003, 17h41
  4. Réponses: 2
    Dernier message: 16/06/2003, 15h15
  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