Ik probeer alles na de tag '</html>'
te pakken en te verwijderen, maar mijn code lijkt niets te doen. Ondersteunt .replace()
regex niet?
z.write(article.replace('</html>.+', '</html>'))
Antwoord 1, autoriteit 100%
Nee. Reguliere expressies in Python worden afgehandeld door de module re
.
article = re.sub(r'(?is)</html>.+', '</html>', article)
In het algemeen:
text_after = re.sub(regex_search_term, regex_replacement, text_before)
Antwoord 2, autoriteit 13%
Als u tekst wilt vervangen met reguliere expressies, gebruikt u de re.subfunctie:
sub(patroon, repl, string[, count, flags])
Het vervangt niet-overlappende exemplaren van pattern
door de tekst die wordt doorgegeven als string
. Als u de overeenkomst moet analyseren om bijvoorbeeld informatie over specifieke groepsopnames te extraheren, kunt u een functie doorgeven aan het argument string
. meer info hier.
Voorbeelden
>>> import re
>>> re.sub(r'a', 'b', 'banana')
'bbnbnb'
>>> re.sub(r'/\d+', '/{id}', '/andre/23/abobora/43435')
'/andre/{id}/abobora/{id}'
Antwoord 3
Je kunt de module re
gebruiken voor regexes, maar regexes zijn waarschijnlijk overkill voor wat je wilt. Ik zou iets kunnen proberen als
z.write(article[:article.index("</html>") + 7]
Dit is veel schoner en zou veel sneller moeten zijn dan een op regex gebaseerde oplossing.
Antwoord 4
In dit specifieke geval, als het gebruik van de re
-module overkill is, hoe zit het dan met het gebruik van de split
(of rsplit
) methode als
se='</html>'
z.write(article.split(se)[0]+se)
Bijvoorbeeld
#!/usr/bin/python
article='''<html>Larala
Ponta Monta
</html>Kurimon
Waff Moff
'''
z=open('out.txt','w')
se='</html>'
z.write(article.split(se)[0]+se)
voert out.txt
uit als
<html>Larala
Ponta Monta
</html>