15 Stimmen

Wie entfernt man Tags aus einer Zeichenkette in Python mit regulären Ausdrücken? (NICHT in HTML)

Ich brauche, um Tags aus einer Zeichenfolge in Python zu entfernen.

<FNT name="Century Schoolbook" size="22">Title</FNT>

Was ist die effizienteste Methode, um den gesamten Tag an beiden Enden zu entfernen, so dass nur "Titel" übrig bleibt? Ich habe nur Möglichkeiten gesehen, dies mit HTML-Tags zu tun, und das hat für mich in Python nicht funktioniert. Ich verwende dies insbesondere für ArcMap, ein GIS-Programm. Es hat seine eigenen Tags für seine Layout-Elemente, und ich muss nur die Tags für zwei bestimmte Titeltext-Elemente entfernen. Ich glaube, dass reguläre Ausdrücke dafür gut funktionieren sollten, aber ich bin offen für alle anderen Vorschläge.

66voto

Domenic Punkte 104864

Das sollte funktionieren:

import re
re.sub('<[^>]*>', '', mystring)

An alle, die sagen, dass Regexe nicht das richtige Werkzeug für diese Aufgabe sind:

Der Kontext des Problems ist so, dass alle Einwände in Bezug auf reguläre/kontextfreie Sprachen ungültig sind. Seine Sprache besteht im Wesentlichen aus drei Einheiten: a = < , b = > y c = [^><]+ . Er möchte alle Vorkommnisse beseitigen, die acb . Dies charakterisiert sein Problem ziemlich direkt als eines, das eine kontextfreie Grammatik beinhaltet, und es ist nicht viel schwieriger, es als ein reguläres zu charakterisieren.

Ich weiß, jeder mag die Antwort "man kann HTML nicht mit regulären Ausdrücken parsen", aber der OP will es nicht parsen, er will nur eine einfache Transformation durchführen.

6voto

Aminah Nuraini Punkte 15960

Bitte vermeiden Sie die Verwendung von Regex. Auch wenn Regex bei einer einfachen Zeichenkette funktioniert, werden Sie in Zukunft Probleme bekommen, wenn Sie eine komplexe Zeichenkette erhalten.

Sie können BeautifulSoup verwenden get_text() Funktion.

from bs4 import BeautifulSoup

text = '<FNT name="Century Schoolbook" size="22">Title</FNT>'
soup = BeautifulSoup(text)

print(soup.get_text())

3voto

Dagg Nabbit Punkte 72150

Die Suche nach dieser Regex und ihre Ersetzung durch eine leere Zeichenkette sollte funktionieren.

/<[A-Za-z\/][^>]*>/

Beispiel (aus der Python-Shell):

>>> import re
>>> my_string = '<FNT name="Century Schoolbook" size="22">Title</FNT>'
>>> print re.sub('<[A-Za-z\/][^>]*>', '', my_string)
Title

1voto

Eric Fortin Punkte 7413

Wenn es nur um das Parsen und Abrufen von Werten geht, könnten Sie sich BeautifulStoneSoup ansehen.

1voto

ianmclaury Punkte 1158

Wenn der Quelltext wohlgeformtes XML ist, können Sie das stdlib-Modul verwenden ElementBaum :

import xml.etree.ElementTree as ET
mystring = """<FNT name="Century Schoolbook" size="22">Title</FNT>"""
element = ET.XML(mystring)
print element.text  # 'Title'

Wenn die Quelle nicht wohlgeformt ist, ist BeautifulSoup ein guter Vorschlag. Die Verwendung von regulären Ausdrücken zum Parsen von Tags ist keine gute Idee, wie mehrere Poster bereits festgestellt haben.

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