web-dev-qa-db-fra.com

Python - Utilisation de regex pour trouver plusieurs correspondances et les imprimer

J'ai besoin de trouver le contenu des formulaires à partir du fichier source HTML, j'ai fait quelques recherches et trouvé une très bonne méthode pour le faire, mais le problème est qu'il n'imprime que trouvé en premier, comment puis-je le parcourir et sortir tout le contenu du formulaire, pas juste le premier?

line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
matchObj = re.search('<form>(.*?)</form>', line, re.S)
print matchObj.group(1)
# Output: Form 1
# I need it to output every form content he found, not just first one...
28
sed

N'utilisez pas d'expressions régulières pour analyser le HTML.

Mais si vous avez besoin de trouver toutes les correspondances d'expression rationnelle dans une chaîne, utilisez la fonction findall .

import re
line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
matches = re.findall('<form>(.*?)</form>', line, re.DOTALL)
print(matches)

# Output: ['Form 1', 'Form 2']
50
Petr Viktorin

À la place d'utiliser re.search utilisation re.findall il vous renverra toutes les correspondances dans un List. Ou vous pouvez également utiliser re.finditer (que j'aime le plus utiliser), il renverra un Iterator Object et vous pouvez simplement l'utiliser pour parcourir toutes les correspondances trouvées.

line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
for match in re.finditer('<form>(.*?)</form>', line, re.S):
    print match.group(1)
21
Aamir Adnan

L'utilisation de regex à cette fin n'est pas la bonne approche. Puisque vous utilisez python vous avez une bibliothèque vraiment géniale disponible pour extraire des parties de documents HTML: BeautifulSoup .

4
ThiefMaster