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

Python Discussion :

Expression regulière python


Sujet :

Python

  1. #1
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut Expression regulière python
    Bonsoir tout le monde, je suis debutante en python et j'ai un problème d'expression regulière :
    En fait, je dois recuperer le code HTML de la page d'un site, et recuperer une information. Ca se presente de la forme :

    plein de choses qui ne m'interesse pas ..... " identifier"="Nom du domaine ( info que je veux recuperer)" .... plein de choses qui ne m'interesse pas.

    Donc, j'ai ecrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import urllib
    from re import *
     
    def getproteinedomain(p):
        f = urllib.urlopen("http://pfam.sanger.ac.uk//protein/%s" %p)
        texte = f.read()
        i=string.index(texte,"identifier")
        expressReg=re.compile('''*identifier *= *"(.+?)"')
        express=expressReg.search(texte,i)
        return express
    je pense que mon expression regulière est fausse, pourriez vous m'aider svp ?
    En fait, je ne sais pas comment dire dans l'expression regulière que c'est forcement "identifier" = " ce qui m'interesse" qu'il faut que je recupère ...
    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Salut

    Je présume que identifier est un attribut d'une des balises de cette page.
    Dans ce cas, ceci devrait fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> tag = '<a href="index.php" identifier="Back home" />Go back home</a>'
    >>> p = re.compile(r'\bidentifier\s*=\s*"([^"]+)"')
    >>> p.findall(tag)
    ['Back home']
    Explication de la regex:
    1. \b signifie qu'on veut que le mot commence ici. Ca écarte donc les bidentifier, dindentifier, berf tout ce qui n'est pas identifier tout court.

    2. \s* signifie 0, 1 ou plusieurs espaces blancs

    3. [^"] Signifie "tout sauf des guillemets"
    3.1 [] => tout ce qui est contenu ici
    3.2 ^ => tout ce qui n'est pas contenu ici
    3.3 " => tout sauf des guillemets

    Note: les guillemets, en HTML, sont parfois remplacés par des apostrophes.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    Non ce n'est pas une balise, en fait ca se trouve dans toute une liste un peu bizare ( je n'ai jamais fait de programmation we) : je copie colle ce que j'ai :

    var layout = [{"length":"415","regions":[{"modelStart":"2","modelEnd":"78","colour":"#2dcf00","endStyle":"jagged","end":101,"display":true,"startStyle":"jagged","aliEnd":"99","modelLength":"81","text":"PDZ","href":"/family/PF00595","type":"pfama","metadata":{"scoreName":"e-value","score":"2.5e-07","description":"PDZ domain (Also known as DHR or GLGF)","end":"101","accession":"PF00595","database":"pfam","aliEnd":"99","identifier":"PDZ","type":"Domain","aliStart":"23","start":"22"},"aliStart":"23","start":22},{"modelStart":"1","modelEnd":"229","colour":"#ff5353","endStyle":"curved","end":"352","display":true,"startStyle":"curved","aliEnd":"352","modelLength":"229","text":"Arfaptin","href":"/family/PF06456","type":"pfama","metadata":{"scoreName":"e-value","score":"6.2e-82","description":"Arfaptin-like domain","end":"352","accession":"PF06456","database":"pfam","aliEnd":"352","identifier":"Arfaptin","type":"Domain","aliStart":"117","start":"117"},"aliStart":"117","start":117}],"markups":[],"metadata":{"database":"uniprot","identifier":"PICK1_HUMAN","description":"PRKCA-binding protein","organism":"Homo sapiens (Human)","accession":"Q9NRD5","taxid":"9606"},"motifs":[{"colour":"#00ffff","type":"coiled_coil","metadata":{"database":"ncoils","type":"coiled_coil","start":"146","end":"166"},"start":"146","end":"166","display":false},{"colour":"#86bcff","type":"low_complexity","metadata":{"database":"seg","score":"2.0800","type":"low_complexity","start":"376","end":"394"},"start":"376","end":"394","display":true}]}];

    Et ce que je veux recuperer la dedans, c'est le premier "identifier" c'est pour ca que j'ai utilisé le string.index ...
    Je vais tout de meme essayer avec ce que tu m'as fait !

  4. #4
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Ah, mais c'est du javascript ça

    Tu as donc plusieurs solutions:
    1. Tu te lances à l'assaut du javascript et tu fais ça dans ton navigateur favoris
    2. Tu continues sur la lancée des regexes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p = re.compile(r'"indentifier":"([^"]*)"')
    3. Tu coupes la chaine pour ne garder que la liste en elle-même (c'est à dire du premier [ au dernier ]), et tu te sers du module json pour le lire. Après, tu peux librement parcourir les infos et retrouver ce qu'il te plait.

  5. #5
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    Je suis obligée de le faire en python, c'est un projet en python, je vais continuer avec les expressions regulières !

Discussions similaires

  1. Recherche recursive à l'aide des expressions reguliére
    Par titoff dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/12/2005, 16h42
  2. [RegEx] aide pour une expression regulière
    Par hugo123 dans le forum Langage
    Réponses: 5
    Dernier message: 24/11/2005, 15h41
  3. ET dans une expression regulière
    Par kesako dans le forum Langage
    Réponses: 4
    Dernier message: 10/11/2005, 12h57
  4. Problème expression regulière ??
    Par panaone dans le forum Langage
    Réponses: 5
    Dernier message: 18/08/2005, 13h41
  5. Variables et Expression Regulière
    Par Temari dans le forum Langage
    Réponses: 5
    Dernier message: 05/08/2005, 01h55

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