Vraag Python - Regex gebruiken om meerdere overeenkomsten te vinden en uit te printen


Ik moet de inhoud van formulieren uit het HTML-bronbestand vinden, ik heb wat gezocht en heb een zeer goede methode gevonden om dat te doen, maar het probleem is dat het alleen het eerst gevonden resultaat afdrukt, hoe ik het kan doorlopen en alle formulierinhoud kan uitvoeren, niet alleen de eerste?

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...

26
2017-10-11 11:03


oorsprong


antwoorden:


Gebruik geen reguliere expressies om HTML te parseren.

Maar als je ooit alle regexp-overeenkomsten in een string moet vinden, gebruik dan de findall functie.

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)

45
2017-10-11 11:09



In plaats van gebruiken re.search gebruik re.findall het zal je alle wedstrijden in een List. Of je zou ook kunnen gebruiken re.finditer (wat ik het leukst vind om te gebruiken) het zal een Iterator Object en je kunt het gewoon gebruiken om alle gevonden overeenkomsten te herhalen.

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)

19
2017-10-11 12:34



Het gebruik van regexes voor dit doel is de verkeerde aanpak. Omdat je Python gebruikt, heb je een echt geweldige bibliotheek beschikbaar om delen uit HTML-documenten te extraheren: beautifulSoup.


4
2017-10-11 11:06