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 :

extraire chaine d'une balise


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut extraire chaine d'une balise
    Bonjour à tous,
    je suis actuellement confronté à un pb! !!!
    j'ai une chaine entourée d'une balise ouvrante et fermante
    par ex : <baliseouvrante>Ma chaine </balisefermante>

    J'aimerai récupérer Ma chaine.

    j'ai commencé à utilser une expression régulière qui est :
    j'ai trouvé ceci sur le net
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> import re
    >>> m = re.search('(?<=abc)def', 'abcdef')
    >>> m.group(0)
    'def'
    par contre, le souci, c'est que la chaine qui délimite est déjà un caractère spécial "<", ce qui est un pb, j'ai essayé avec \<, toujours rien

    là je suis vraiment bloqué !!!
    si vous avez une astuce !!
    je vous remercie

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    j'ai réussi partiellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    def test(p):
        m = re.search('(?<=<baliseouvrante>)\w*', p)
        print m.group(0)
    dans ce cas, l'exemple suivant <baliseouvrante> test </baliseouvrante>
    il me récupère test

    par contre si j'ai <baliseouvrante> test-une </baliseouvrante>
    il me retourne aussi test, le caractère - n'est pas pris en compte ???

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Le caractère - ne fait pas partie de la classe \w
    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def test(p):
        m = re.search('<(baliseouvrante)>(.*?)</\\1>', p)
        print m.group(2)
    Les parenthèses capturent le nom de la balise, et le \\1 renvoie au groupe n°1 (ici le nom de la balise, qui peut donc être une expression plus compliquée)
    Si le nom de ta balise est fixe, tu peux utiliser simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def test(p):
        m = re.search('<baliseouvrante>(.*?)</baliseouvrante>', p)
        print m.group(1)

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    merci
    ma balise étant fixe, ça allège !!!!!

    merci beaucoup

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    en fait non je me suis réjoui pour rien !!!!!
    je pensais que ça suffisait car là j'ai testé sur un exemple bidon.

    ce que j'ai en entrée, c un fichier
    qui comporte certaines séquences <b>phrase</b>
    en gros j'ai un texte normale avec certaines phrases entourée de <b></b>
    et moi ce que je veux faire c'est récupèrer toute ces phrases qui sont entourée de ces balises.

    je pensais qu'avec une expression régulière ça suffisait.
    mais faut-il étendre l'expression régulière ou dois-je écrire un pg python ??

    merci

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    c bon, ça marche !!!!!!! parfaitement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    p = open_file(fichier)
    w = p.decode("utf-8")
    m = re.findall('<b>(.*?)</b>',w)
    print m

    merci beaucoup pour l'expression régulière.

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

Discussions similaires

  1. Extraire chaine d'une variable
    Par dipsou dans le forum Shell et commandes POSIX
    Réponses: 1
    Dernier message: 28/04/2012, 15h53
  2. regexp = extraire value d'une balise input par son "name"
    Par NoobX dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/06/2008, 16h03
  3. [VB6] Extraire une chaine d'une autre chaine
    Par yaya54 dans le forum VB 6 et antérieur
    Réponses: 22
    Dernier message: 23/02/2006, 16h57
  4. Réponses: 7
    Dernier message: 17/09/2005, 23h38
  5. Réponses: 2
    Dernier message: 10/07/2002, 11h51

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