511 Stimmen

python .replace() regex

Ich versuche, alles zu erfassen, nachdem die '</html>' Tag und lösche ihn, aber mein Code scheint nichts zu bewirken. Hat .replace() keine Regex-Unterstützung?

z.write(article.replace('</html>.+', '</html>'))

82 Stimmen

Warnung: Parsen von HTML mit regulären Ausdrücken führt zum Wahnsinn .

6 Stimmen

Ich habe einen Haufen Müll nach meinem abschließenden html-Tag und möchte ihn einfach entfernen.

1 Stimmen

Was aber, wenn Ihr HTML eine Zeichenkette in Anführungszeichen, einen Kommentar, ein JavaScript oder ein CDATA enthält? </html> ? Oder was, wenn der Müll am Ende selbst eine </html> ? Wenn Sie nicht garantieren können, dass nichts davon passieren kann, müssen Sie entweder den HTML-Code vollständig parsen oder auf andere Weise feststellen, wie viele Daten Sie haben (z. B. eine Content-Length: HTTP-Header).

861voto

Ignacio Vazquez-Abrams Punkte 735200

Nein. Reguläre Ausdrücke werden in Python von der re Modul.

article = re.sub(r'(?is)</html>.+', '</html>', article)

Generell:

str_output = re.sub(regex_search_term, regex_replacement, str_input)

116voto

Andre Pena Punkte 52140

Um Text durch einen regulären Ausdruck zu ersetzen, verwenden Sie die re.sub Funktion:

sub(muster, repl, string[, count, flags])

Sie ersetzt nicht-überlappende Instanzen von pattern durch den Text, der als string . Wenn Sie die Übereinstimmung analysieren müssen, um beispielsweise Informationen über bestimmte Gruppenerfassungen zu extrahieren, können Sie eine Funktion an die string Argument. mehr Infos hier .

Beispiele

>>> import re
>>> re.sub(r'a', 'b', 'banana')
'bbnbnb'

>>> re.sub(r'/\d+', '/{id}', '/andre/23/abobora/43435')
'/andre/{id}/abobora/{id}'

9voto

Julian Punkte 2363

Sie können die re Modul für Regexe, aber Regexe sind wahrscheinlich ein Overkill für das, was Sie wollen. Ich könnte etwas versuchen wie

z.write(article[:article.index("</html>") + 7]

Dies ist viel sauberer und sollte viel schneller sein als eine Regex-basierte Lösung.

8voto

norio Punkte 3520

Für diesen speziellen Fall, wenn Sie re Modul ist ein Overkill, wie wäre es mit der Verwendung von split (oder rsplit ) Methode als

se='</html>'
z.write(article.split(se)[0]+se)

Zum Beispiel,

#!/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)

Ausgänge out.txt como

<html>Larala
Ponta Monta 
</html>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X