Wie kann ich die ANSI-Escape-Sequenzen aus einer Zeichenfolge in Python entfernen
Dies ist mein string:
'ls\r\n\x1b[00m\x1b[01;31mexamplefile.zip\x1b[00m\r\n\x1b[01;31m'
War ich mit code zum abrufen der Ausgabe aus einer SSH-Befehl und ich möchte, dass mein string enthält nur 'examplefile.zip'
Was kann ich verwenden, um entfernen Sie die zusätzlichen escape-Sequenzen?
InformationsquelleAutor der Frage SpartaSixZero | 2013-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Löschen Sie Sie mit einem regulären Ausdruck:
Demo:
(Ich habe aufgeräumt, die escape-Sequenz Ausdruck zu Folgen der Wikipedia-überblick über ANSI-escape-codesdie sich auf die CSI-Sequenzen, und ignorieren die C1-codes, da Sie nie verwendet, in der heutigen UTF-8-Welt).
InformationsquelleAutor der Antwort Martijn Pieters
Akzeptierte Antwort auf diese Frage nur der Auffassung, Farb-und font-Effekte. Es gibt eine Menge von Sequenzen, die nicht end in 'm', wie die cursor Positionierung, ist das löschen, und Blättern Regionen.
Den kompletten regexp für das Control-Sequenzen (auch bekannt als ANSI-Escape-Sequenzen) ist
Finden ECMA-48 Abschnitt 5.4 und ANSI-escape-code
InformationsquelleAutor der Antwort Jeff
- Funktion
Basierend auf Martijn Pieters♦'s Antwort mit Jeff regexp.
Test
Prüfung
Wenn Sie möchten, führen Sie es durch sich selbst, verwenden Sie
python3
(bessere unicode-Unterstützung, blablabla). Hier ist, wie die test-Datei sollte sein:InformationsquelleAutor der Antwort Édouard Lopez
Den vorgeschlagenen regex nicht den trick tun für mich, so habe ich eine meiner eigenen.
Das folgende ist eine python-regex, die ich erstellt auf der Grundlage der spec gefunden hier
Getestet habe ich meine regex auf den folgenden Schnipsel (im Grunde ein kopieren und einfügen aus der ascii-table.com Seite)
Hoffentlich hilft das anderen 🙂
InformationsquelleAutor der Antwort kfir
wenn Sie möchten, entfernen Sie die
\r\n
bit, übergeben Sie den string durch die Funktion (geschrieben von sarnold):Aber vorsichtig, das wird Klumpen zusammen, der text vor und hinter den escape-Sequenzen. Also, mit Martijn gefiltert string
'ls\r\nexamplefile.zip\r\n'
erhalten Sielsexamplefile.zip
. Hinweis: diels
vor dem gewünschten Dateinamen.Ich würde das stripEscape zuerst die Funktion zum entfernen der escape-Sequenzen, dann übergeben Sie die Ausgabe auf Martijn ' s regulären Ausdruck, der zu vermeiden wäre die Verkettung der unerwünschten bit.
InformationsquelleAutor der Antwort Neodied