python .replace() regex

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 patterndoor 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 regebruiken 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.txtuit als

<html>Larala
Ponta Monta 
</html>

Other episodes