Je souhaite utiliser le module re
pour extraire tous les nœuds html d'une chaîne, y compris tous leurs attributs. Cependant, je veux que chaque attr soit un groupe, ce qui signifie que je peux utiliser matchobj.group()
pour les obtenir. Le nombre d'attr dans un noeud est flexible. C'est là que je suis confus. Je ne sais pas comment écrire une telle regex. J'ai essayé </?(\w+)(\s\w+[^>]*?)*/?>'
mais pour un noeud comme <a href='aaa' style='bbb'>
je peux seulement obtenir deux groupes avec [('a'), ('style="bbb")]
.
Je sais qu'il y a de bons parseurs HTML. Mais en réalité je ne vais pas extraire les valeurs des attrs. J'ai besoin de modifier la chaîne brute.Utilisation de regex pour extraire tous les attributs html
Répondre
Description de
Pour capturer un nombre infini d'attributs, il aurait besoin d'être un processus en deux étapes, où le premier vous tirez l'élément entier. Ensuite, vous parcourez les éléments et obtenez un tableau d'attributs correspondants.
regex pour attraper tous les éléments: <\w+(?=\s|>)(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?>
regex pour attraper tous les attributs d'un seul élément: \s\w+=(?:'[^']*'|"[^"]*"|[^'"][^\s>]*)(?=\s|>)
python Exemple
Voir travaillant exemple: http://repl.it/J0t/4
code
import re
string = """
<a href="i.like.kittens.com" NotRealAttribute=' true="4>2"' class=Fonzie>text</a>
""";
for matchElementObj in re.finditer(r'<\w+(?=\s|>)(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?>', string, re.M|re.I|re.S):
print "-------"
print "matchElementObj.group(0) : ", matchElementObj.group(0)
for matchAttributesObj in re.finditer(r'\s\w+=(?:\'[^\']*\'|"[^"]*"|[^\'"][^\s>]*)(?=\s|>)', string, re.M|re.I|re.S):
print "matchAttributesObj.group(0) : ", matchAttributesObj.group(0)
Sortie
-------
matchElementObj.group(0) : <a href="i.like.kittens.com" NotRealAttribute=' true="4>2"' class=Fonzie>
matchAttributesObj.group(0) : href="i.like.kittens.com"
matchAttributesObj.group(0) : NotRealAttribute=' true="4>2"'
matchAttributesObj.group(0) : class=Fonzie
Please don't use regex. Utilisez BeautifulSoup
:
>>> from bs4 import BeautifulSoup as BS
>>> html = """<a href='aaa' style='bbb'>"""
>>> soup = BS(html)
>>> mytag = soup.find('a')
>>> print mytag['href']
aaa
>>> print mytag['style']
bbb
Ou si vous voulez un dictionnaire:
>>> print mytag.attrs
{'style': 'bbb', 'href': 'aaa'}
Je sais que les parseurs HTML devraient être de bons choix, mais en fait je ne pense pas qu'ils puissent fonctionner pour moi. J'ai besoin de modifier la chaîne brute. – zhangyangyu
@zhangyangyu Jetez un oeil à [this] (http://www.crummy.com/software/BeautifulSoup/bs4/doc/#replace-with) – TerryA
Peut-être que le downvoter s'il vous plaît clarifier pourquoi ils downvoted – TerryA
- 1. RegEx pour extraire tous les attributs des balises HTML, y compris JavaScript
- 2. regex pour extraire les noms et les valeurs des attributs
- 3. Regex pour extraire l'attribut de l'élément html
- 4. Regex pour supprimer tous les attributs d'un paragraphe
- 5. Regex: Supprime les attributs HTML sauf SRC
- 6. Regex pour extraire des liens de HTML
- 7. Regex pour correspondre à des attributs html
- 8. Comment extraire tous les attributs de balise img
- 9. Regex: obtenir des attributs HTML
- 10. Requête DBPedia pour extraire tous les attributs de tous les smartphones présents dans dbpedia
- 11. HTML Regex pour extraire des données
- 12. javascript regex pour les attributs correspondants dans la chaîne HTML
- 13. JavaScript: Utilisation regex pour extraire les caractères entre autres caractères
- 14. Comment extraire les attributs et le texte du HTML?
- 15. jQuery obtenir tous les attributs HTML
- 16. Utilisation de regex en python pour les balises html
- 17. PHP Regex HTML - Extraire l'URL
- 18. Regex pour extraire des liens avec des attributs spécifiés
- 19. Suppression de tous les attributs d'une balise html en utilisant regex
- 20. Utilisation de RegEx pour extraire le numéro d'une chaîne alphanumérique
- 21. Extraire des données avec regex de html
- 22. Obtention de tous les attributs à partir d'une balise HTML <a> avec regex
- 23. Utilisation de regex avec HTML
- 24. JavaScript RegEx pour extraire la valeur de balise HTML
- 25. Regex pour l'analyse de certains attributs html name et values
- 26. Xslt extraire les attributs et la génération html
- 27. PHP Regex, extraire tous les tags personnalisés du texte
- 28. Regex: caractère spécial grep dans les balises HTML-attributs
- 29. Comment extraire tous les nombres entre guillemets avec regex?
- 30. attributs html correspondants avec regex dans php
FFS ... http://www.crummy.com/software/BeautifulSoup/ –
Pensez à utiliser HTML parseurs au lieu de Regex . http://www.crummy.com/software/BeautifulSoup/ – Achrome
Normal la première correspondance est écrasée par la seconde. –