2010-08-19 5 views
3

Je travaille sur un petit script Python pour nettoyer les documents HTML. Cela fonctionne en acceptant une liste de balises à GARDER, puis en analysant les balises HTML qui ne sont pas dans la liste. J'ai utilisé des expressions régulières pour le faire et j'ai réussi à faire correspondre des balises d'ouverture et des balises à fermeture automatique. mais ne ferme pas les tags. Le modèle que j'ai expérimenté pour faire correspondre les tags de fermeture est </(?!a)>. Cela me semble logique alors pourquoi ne travaille pas? Le (?!a) devrait correspondre à tout ce qui n'est pas une balise d'ancrage (pas que le "a" peut être n'importe quoi - c'est juste un exemple).Expression régulière correspondant aux balises HTML de fermeture

Édition: AGG! Je suppose que l'expression rationnelle n'a pas montré!

+0

[utiliser HTML :: Parser || mourir] (http://stackoverflow.com/q/4231382/471272). :) – tchrist

Répondre

3

Don't use regex to parse HTML. Cela ne vous donnera que des maux de tête.

Utilisez plutôt un analyseur XML. Essayez BeautifulSoup ou lxml.

+0

J'ai vu BeautifulSoup mais je suis aussi un minimaliste, donc j'ai préféré utiliser uniquement ce qui est livré avec Python. Je pense que mon problème ici est suffisant pour que je le reconsidère. Merci! – kevin628

+0

Si vous voulez une solution "piles incluses", regardez HTMLParser dans le fichier stdlib. – simon

5
<TAG\b[^>]*>(.*?)</TAG> 

Matchs de la paire d'ouverture et de fermeture d'une balise HTML spécifique.

<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1> 

Correspondra à la paire d'ouverture et de fermeture de n'importe quelle balise HTML.

Voir here.

+6

... sauf s'il existe des étiquettes imbriquées du même type, par ex. '

' - alors, la regex pensera que le premier '
' est la balise de fermeture pour le premier '
'. Comme les autres auteurs l'ont souligné, vous ne pouvez pas analyser HTML ou n'importe quel langage similaire en utilisant des expressions régulières. –

+2

Merci pavanlimo, cette regex ] *> (. *?) Script> Fonctionne parfaitement pour que je puisse détecter le début et la fin des javascripts – Draykos

Questions connexes