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

Outils Discussion :

Expression régulière (notepad ++) : Comment extraire un texte entre 2 balises ?


Sujet :

Outils

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Points : 7
    Points
    7
    Par défaut Expression régulière (notepad ++) : Comment extraire un texte entre 2 balises ?
    Salut à tous !

    J'ai un gros document html ou j'aimerais extraire des données...

    Ces données sont toujours entre les mêmes balises, donc je me demandais si il est possible, avec les expressions régulières, de dire "je veux supprimer tout sauf ce qui est entre "_tab%22%7D">" et "</a></div>" ?
    (désolé, je ne suis pas un pro, je le dis donc en "Français" lol )

    Voila un apercu de mon html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    _tab%22%7D">blablabla</a></div><a class=".....
    _tab%22%7D">blobloblo</a></div><a class="....
    ...etc...
    je cherche à "extraire" tout ce qui est entre
    "_tab%22%7D">" et "</a></div>"
    Voila le résultat que je cherche à obtenir :
    C'est possible avec notepad ++ ? si oui comment ?

    Merci beaucoup et désolé pour mes questions de noobs

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    En mode expression régulière :
    rechercher : _tab%22%7D">(.+)</a></div>remplacer par : $1
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    merci mais je pense qu'il manque un truc du genre .* au début ? (je sais pas)

    Pour dire (en français désolé...) supprimer tout SAUF ce qui commence par _tab%22%7D"> et fini par </a></div>

    J'ai essayé ça (mais ça ne marche pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .*_tab%22%7D">(.+)</a></div>.*
    je suis sur qu'il manque pas grand chose ! lol

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu as la réponse pourquoi tu ne corriges pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .*_tab%22%7D">(.+)</a></div>.*
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    nos messages ont du ce croiser au moment ou j'éditais mon post, j'ai testé ça marche pas...

    Ou plus précisément, ça semble marcher sur une ligne mais pas sur mon fichier de plus de 1000 lignes... je comprends pas pourquoi

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Sur l'exemple que tu donnes ça fonctionne.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    oui effectivement ça marche, mais cela ne " m'épure " pas mon fichier... je ne comprends pas pourquoi...

    Si je test sur 4 ou 5 lignes isolées, pas de prob, ça marche très bien, mais si je le fait sur tout mon fichier html, ça ne marche pas...

    Je ne vois vraiment pas pourquoi

    J'ai joint un bout de code en PJ pour montrer...
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Tu peux le faire avec cette pattern (et une version pas trop vieille de notepad++):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    search: (?>[^_]++|_(?!tab%22%7D">[^<]++</a></div>))+(?>_tab%22%7D">([^<]++)</a></div>)?
    replace: $1\n
    pour le détail:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (?>            # groupe atomique: va contenir tout ce qui n'est pas la partie recherchée. 
        [^_]++     # tous les caractères sauf "_", une ou plusieurs fois (possessif) 
      |            # ou
                   # "_" non suivi par "tab%22%7D">...</a></div>"
        _(?!tab%22%7D">[^<]++</a></div>)  
    )+             # on répète le groupe une ou plusieurs fois
    (?>                 # groupe atomique: contient ce que l'on recherche
        _tab%22%7D">    # caractères littéraux: _tab%22%7D">
        ([^<]++)        # groupe capturant 1: tous ce qui n'est pas un "<"
        </a></div>      # caractères littéraux: </a></div>
    )?                  # on rend ce groupe optionel pour pouvoir effacer les caractères après la dernière occurrence.
    Un groupe atomique (?>...) est un groupe non capturant qui, une fois clos, interdit au moteur d'expression régulière de reculer caractère par caractère (backtracking) si la pattern échoue plus tard. Pour ce faire, quand le moteur de regex rencontre un groupe atomique, celui-ci n'a pas à enregistrer les positions de recule pour la sous chaine correspondante au groupe. En cas d'échec de la pattern après le groupe, alors que le moteur recule caractère par caractère pour voir si une autre solution est possible, arrivé à la sous chaine décrite par le groupe atomique, le moteur devra sauté directement avant le premier caractère décrit par le groupe pour poursuivre sa manœuvre de recule.

    Un quantificateur possessif n'est rien d'autre qu'un groupe atomique qui ne dit pas son nom. En effet a++ et (?>a+) sont équivalents. C'est juste un raccourci syntaxique.

    Pour vérifier que "_" n'est pas suivi par tab%22%7D">...</a></div>, on utilise un test avant négatif (?!...).


    Tout ceci étant dit, on peut faire plus court mais moins performant avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    search: .*?(?:_tab%22%7D">(.+?)</a></div>|$)
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Wahouu !! NIKEL ça marche super !!! Merci infiniment !

    Et merci beaucoup pour toutes les précieuses explications qui me serviront certainement !

    TOP !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/06/2008, 23h19
  2. Regexp: extraire du texte entre deux balises
    Par moook dans le forum Langage
    Réponses: 11
    Dernier message: 19/06/2007, 18h08
  3. [RegExp] Extraire le texte entre 2 balises
    Par d1g-2-d1g dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/02/2007, 19h15
  4. Réponses: 24
    Dernier message: 20/08/2006, 14h08

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