Ich verwende Python 2.x [nicht verhandelbar] zum Lesen von XML-Dokumenten [erstellt von anderen], die den Inhalt vieler Elemente Zeichen enthalten können, die keine gültigen XML-Zeichen sind unter Verwendung der _xHHHH_
Konvention z ASCII BEL alias U + 0007 wird durch die 7-stellige Sequenz u"_x0007_"
dargestellt. Weder die Funktionalität, die die Darstellung eines alten Zeichens im Dokument erlaubt, noch die Art zu entkommen, ist verhandelbar. Ich analysiere die Dokumente mit cElementTree oder lxml [semi-verhandelbar].Unescene _xHHHH_ XML-Escape-Sequenzen mit Python
Hier ist mein bester Versuch unescapeing den Parser Ausgabe so effizient wie möglich:
import re
def unescape(s,
subber=re.compile(r'_x[0-9A-Fa-f]{4,4}_').sub,
repl=lambda mobj: unichr(int(mobj.group(0)[2:6], 16)),
):
if "_" in s:
return subber(repl, s)
return s
Die oben vorgespannt ist durch eine sehr niedrige Frequenz von „_“ in typischem Text zu beobachten und ein besser als verdoppelt der Geschwindigkeit durch Vermeiden der Regex-Vorrichtung, wo es möglich ist.
Die Frage: Gibt es bessere Ideen da draußen?
Die Suche nach '_x' ist etwas langsamer (Python 2.6) und funktioniert nicht mit Pythons früher als 2.3. –
Wie für Python 2.2 und früher, du hast Recht @John - ich nahm irgendwie 'x> = 3' (ist noch jemand mit Python 2.2 fest ....?! Wenn ja, ich bin tief enttäuscht. .. !!!). Was die relative Geschwindigkeit angeht, hängt es davon ab, wie viele isolierte '_'' Sie bekommen und wie viel langsamer die Überprüfung mit einer Regex sein kann (testen Sie nach meiner Erfahrung schnell, aber das ursprüngliche Poster sagt etwas anderes) - URL zu jedem spezifische Benchmark pls? –