QRegExp

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
PNS-Richi
User
Beiträge: 68
Registriert: Donnerstag 17. Januar 2008, 01:48

Hallo,

in PyQT gibt es ein Syntax Highlighting Beispiel. Mit diesem Beispiel konnte ich schon einiges für mein Programm lösen, aber nicht alles.

z.b.: $text = "test" . "test"

Code: Alles auswählen

...
        quotationFormat = QtGui.QTextCharFormat()
        quotationFormat.setForeground(QtGui.QColor("#B01111"))
        self.highlighter.addMapping("\".*\"", quotationFormat)
        self.highlighter.addMapping("\'.*\'", quotationFormat)
...
Die Klammern und der Inhalt sollte nun Rot sein. Ist er auch. Nur das zwischen Stück mit dem Punkt ist auch Rot(ist ja auch klar).

Da ich mit RegExp nicht gut umgehen kann, weiß ich nicht was damit möglich ist und wo die Grenzen sind. Sollte ich es nicht mit RegExp schaffen gibt es noch umständlichere Methoden(wie mans nimmt...).

Was ich gerne noch mit RegExp schaffen würde, wenns möglich ist:

function blub { <- Klammer Gelb

} <- Klammer Gelb

Beispiel2:
function blub { <- rot

function blub2 { <- gelb

} <- gelb

Also wenn er 2 mal { ohne auch 2 abschließende } findet soll er das erste Rot einfärben.

lg Richi
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Reguläre ausdrücke werden normalerweise "greedy" ausgewertet, soll heissen, dass sie so viele Zeichen matchen wie irgendwie möglich.

Code: Alles auswählen

'".*"'
bedeutet dann, dass möglichst alles zwischen zwei Anführungszeichen gelesen werden soll. In Python kannst du dem Ausdruck mitteilen, dass er nicht greedy arbeiten soll:

Code: Alles auswählen

'".*?"'
Jetzt wird nur bis zum ersten Lerzeichen gematch. Alternativ kannst du das Anführungszeichen auch aus den zu matchenden Zeichen ausschließen:

Code: Alles auswählen

'"[^"]*"'
.
PNS-Richi
User
Beiträge: 68
Registriert: Donnerstag 17. Januar 2008, 01:48

Vielen Dank - Funktioniert wunderbar :)

Nur wie mach ich folgendes -> " test \"blub\""?

Er soll dabei \" ignorieren.

lg Richi
Antworten