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 régulière inverse


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 61
    Par défaut expression régulière inverse
    bonjour,

    j'aimerais utiliser une expression régulière afin de sélectionner tout ce ce qui ne se trouve pas entre commentaires dans un fichier HTML

    exemple

    ceci est <!--note à exclure--> du texte dans un fichier HTML

    devient

    ceci est du texte dans un fichier HTML

    en bref, je cherche à faire l'INVERSE de ceci :
    <!--[^>]*>

    merci pour ce forum très utile

    Fabrice

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Par défaut
    Tu devrais y arriver plus facilement en utilisant HTMLParser
    Avec un Handle_comment qui les squiz et une redirection pour le reste.

    Sinon ta reg pourrais resembler à ca (j'ai pas tester, c'est surement à corriger un peu) :

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 61
    Par défaut
    en fait, j'utilise mon expression régulière dans le cadre de Beautiful Soup (http://www.crummy.com/software/BeautifulSoup/) :

    soup = BeautifulSoup()
    soup.feed(html)
    soup.html.body.fetchText(re.compile('(\\r|\\n|\\t)*<!--[^>]*>)')

    ceci sélectionne uniquement les commentaires (considérés comme des noeuds de type texte par Beautiful Soup)

    ce que je cherche à faire est tout à fait l'inverse ;-)

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Par défaut
    T'as testé celle que je t'ai mis ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 61
    Par défaut
    merci pour ton aide; je ne comprends pas exactement ta regexp :

    <.*(?:<!--.*?-->).*> ne sélectionne rien

    alors que

    .*(?:<!--.*?-->).* sélectionne une partie des commentaires

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Par défaut
    En gros :

    <.*> selectionne tout ton code HTML. (du premier < au dernier >)

    (?:<!--.*?-->) match les commentaire, mais sans posibiliter de les récuperer avec la fonction group () (opérateur (?:...) + <!--.*?--> pour definir 1 commentaire)

    J'ai fait un mix des deux.
    Qu'entend tu par une partie des commentaires ? Le premier ?
    Peut-etre avec un : .*(?:<!--.*?-->)+.*

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 61
    Par défaut
    dans le cadre de beautiful Soup :

    soup.html.body.fetchText()

    me renvoie une liste contenant TOUS les noeuds de type texte et les commentaires

    en ajoutant une regexp, il filtre les noeuds en renvoyant uniquement ceux compatibles avec la regexp; j'aimerais avoir uniquement les noeuds de type texte. ceci me renvoyant les commentaires :

    print soup.html.body.fetchText(re.compile('(\\r|\\n|\\t)*<!--[^>]*>'))

    je cherche à faire qqchose comme ceci :

    print soup.html.body.fetchText(NOT(re.compile('(\\r|\\n|\\t)*<!--[^>]*>')))

    ...incorrect évidemment

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Par défaut
    Tu peux executer un fetchText () et me mettre un bout de ce qu'il te retourne ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 61
    Par défaut
    voici le genre de commentaire que FetchText me sélectionne (je dois prendre en compte les noeuds texte commençant par \n ou \r):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <!--var pub=0;var myDate = new Date();AT_MISC = myDate.getTime();document.write(\'<script src="http://adserver.adtech.de/?addyn|2.0|224|63623|1|1|target=_blank;loc=100;misc=\' + AT_MISC + \';grp=1">\');if (navigator.userAgent.indexOf("Mozilla/2.") >= 0 || navigator.userAgent.indexOf("MSIE") >= 0) {   document.write(\'<img src="http://adserver.adtech.de/?adserv|2.0|224|63623|1|1|ADTECH;grp=1;loc=200;" border="0" width="468" height="60">\');}document.write(\'</scr\' + \'ipt>\');// -->
    \r\n<!--\r\nfunction verific(frm)\r\n{\r\nif(frm.textfield.value.length > 0)\r\n{\r\nreturn true;\r\n}\r\nreturn false;\r\n}\r\n-->\r\n                  
    <!-- DEBUT / DStats -->\r\n
    <!--dte = new Date();document.writeln(\'<img width="1" height="1" src="http://www.jeuxvideo.com/cgi-bin/dstats?S=001&C=042&D=\' + dte.getHours()+dte.getMinutes()+dte.getSeconds()+\'">\');//-->\r\n
    \r\n<!-- FIN / DStats -->\r\n
    [/code]

Discussions similaires

  1. inverse d'une expression régulière
    Par hebusjd dans le forum Langage
    Réponses: 7
    Dernier message: 09/06/2008, 13h23
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 18h17
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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