Regulären Ausdruck für VT100

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
movies1978
Beiträge: 44
Registriert: 08.08.2002 13:39:41

Regulären Ausdruck für VT100

Beitrag von movies1978 » 13.02.2006 12:43:51

Hallo Leute,
kennt einer von euch einen regulären Ausdrück für alle VT100 Kontrollzeichen?
Ich brauche den um die Kontrollzeichen aus einer Consolenasugabe zu eleminieren.
Mfg Mathias

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 13.02.2006 14:27:21

hallo!

weder kenn' ich einen fertigen Ausdruck, noch könnte ich einen schreiben,
aber die Regeln sind relativ einfach. Man kann die 256 möglichen Zeichen
in 16 Spalten zu je 16 Zeichen darstellen. Dann sind die Spalten 0, 1, 8 und 9
Steuerzeichen (z.B. CR), die Spalten 2 und 3 sind Ziffern und Satzzeichen usw.
"man ascii" hat ganz unten eine Tabelle für die Spalten 0...7.

Zur Dekodierung der magischen Zeichenfolgen muss man nur diese Spalten
unterscheiden, die Bedeutung der Zeichen innerhalb einer Spalte ist jeweils gleich.

Dann gibt es 5 Arten von Codes:
- a) echte, einzelne Steuerzeichen aus Spalte 0 und 1
- b) echte, einzelne Steuerzeichen aus Spalte 8 und 9
- c) die eigentlichen "Control Sequences"
- d) "Control Functions" aus einem 'ESC' und einem Zeichen aus Spalte 6 oder 7
- e) beliebig lange "Control Strings"

Die Arten a, b und besonders e kann man in der Praxis für diese Anwendung
vergessen. Abteilung d ist trivial: 'ESC' und genau 1 Zeichen aus '`'...'~'.

Die Art d besteht aus 4 Gruppen in fester Reihenfolge:
- 1) entweder 2 Zeichen 'ESC[' oder ein Zeichen 'CSI' (dezimal 155)
- 2) beliebig viele (auch 0) Zeichen aus der Spalte 3 ('0' ... '?')
- 3) beliebig viele (auch 0) Zeichen aus der Spalte 2 (' ' ... '/')
- 4) genau 1 Zeichen aus den Spalten 4 bis 7 ('@' ... '~')
wobei 'CSI' wahrscheinlich nicht benutzt wird.

Das war's schon, für RegExExperten kein Thema, oder :)

Das ganze nochmal als Amts-English.pdf gibt's hier: ECMA-048 (nur Kapitel 5)
Oder Ein VT100-Parser in C
Beware of programmers who carry screwdrivers.

Benutzeravatar
movies1978
Beiträge: 44
Registriert: 08.08.2002 13:39:41

Beitrag von movies1978 » 13.02.2006 15:14:15

Danke für die ausführliche Antwort!
Ich habe mittlere weile eine regulären Ausdruck geschrieben, der alles relativ ausfiltered. Sicher bin ich dabei nicht, da ich den durch probieren und ungefähres Schema gemacht habe, aber wen es interessiert. Außerdem habe ich mich noch von einer anderen Forums antwort inspirieren lassen (keine fremden Federn für mich)

Code: Alles auswählen

VT100_RE = re.compile('\x1b(\\[[0-9;]*[a-zA-Z]|[a-zA-Z0-9\\(\\)])|\x1b\[\?25h')	
Mfg

Mathias
EDIT :
noch besser (deckt noch mehr Fälle ab)
VT100_RE = re.compile('\x1b(\\[[0-9;]*[a-zA-Z]|[a-zA-Z0-9\\(\\)])|\x1b\[\?\d+[lh]')

Antworten