Problem mit QRegExp

Alles rund um die Programmierung mit Qt
Antworten
m-obi
Beiträge: 18
Registriert: 14. August 2013 07:46

Problem mit QRegExp

Beitrag von m-obi »

Hallo Leute,

ich hab vor einen Parser zu bauen für VRML-Dateien. Nun scheitere ich schon an dem RegEx.
Dies ist der Testtext

Code: Alles auswählen

point[abc][ 
def]point[ghi]  
[jk
l]
Nun bekomme ich mit diesen Code

Code: Alles auswählen

    QRegExp regExp("point\\[(.*)\\]");
    regExp.setMinimal(true);
    int count = 0;
    int pos = 0;
    while ((pos = regExp.indexIn(QString(line), pos)) != -1) {
        ++count;
        pos += regExp.matchedLength();
    }
    qDebug() << "Count:" << count;
als Count, 2 raus, was ja auch richtig ist. line ist der Testtext.
Nun ist es so, dass auch Leerzeichen und Newlines drin vorkommt.
Z.B. so

Code: Alles auswählen

point 
   [ab c][ 
def]  point   [g h i]  
[ jk
l]
Nur ich komme jetzt zu keinem vernünftigen Ergebnis. Also zu Count 2.
Kann mir da jemand evtl. helfen?
Gruß m-obi
bst
Beiträge: 56
Registriert: 7. November 2006 13:16
Wohnort: Ilsfeld

Re: Problem mit QRegExp

Beitrag von bst »

Morgen,

wenn vor dem "[" Leerzeichen stehen dürfen brauchst Du dort ein \s*.

Code: Alles auswählen

QRegExp regExp("point\\s*\\[(.*)\\]");
HTH, Bernd
m-obi
Beiträge: 18
Registriert: 14. August 2013 07:46

Re: Problem mit QRegExp

Beitrag von m-obi »

Danke, das hat prima geklappt.

Nun bin ich schon beim Nächsten. Unzwar soll er alle Zahlen bis zu einem Punkt oder einem Leerzeichen finden.
Also "\\d+". Aber dann für das Leerzeichen oder den Punkt weiß ich nicht.
Gruß m-obi
bst
Beiträge: 56
Registriert: 7. November 2006 13:16
Wohnort: Ilsfeld

Re: Problem mit QRegExp

Beitrag von bst »

\d+ ist normalerweise gierig, da bekommst Du doch bereits alle Ziffern?

Wenn danach ein Punkt oder Leerzeichen stehen muss nimm entweder \d+[. ] und speichere Dir ggf. die Ziffern in einem Submatch (\d+)[. ] oder nimm einen positiven Lookahead \d+(?=[. ])
Antworten