Seite 1 von 2
QString mittels RegEx trennen
Verfasst: 3. Mai 2006 10:24
von sascha
Hallo....
Ich habe vergeblich versucht folgenden String zu trennen:
Dabei möchte ich gerne in der QStringList die Texte, die zwischen den [ ] Klammern stehen bekommen....
Habe das mit QRegEx gemacht, aber scheinbar falsch, denn er liefert immer den gesamten String....
Hat einer von Euch den korrekten RegEx zur Hand?
Re: QString mittels RegEx trennen
Verfasst: 3. Mai 2006 12:26
von Christian81
sascha hat geschrieben:
Hat einer von Euch den korrekten RegEx zur Hand?
Wie wäre es erstmal mit deiner damit man sieht was Du evtl. falsch gemacht hast?
Verfasst: 3. Mai 2006 12:35
von sascha
Daran soll es doch nicht hapern....
ich hatte:
Verfasst: 3. Mai 2006 12:58
von Christian81
sascha hat geschrieben:Daran soll es doch nicht hapern....
Gut, ich wollte nur sicher gehen dass man sich Gedanken gemacht hat
Ich würde mal sagen Du ignorierst die Leerzeichen dazwischen.
Verfasst: 3. Mai 2006 14:56
von sascha
Ok das war schon mal ein guter Hinweis....
Allerdings bekomme ich nun die schließende Klammer mit rein:
Woran kann das denn liegen?
Wäre cool, wenn ich nochmal eine Hilfestellung beommen könnte!
Und danke nochmal...
Verfasst: 3. Mai 2006 15:38
von patrik08
sascha hat geschrieben:
Allerdings bekomme ich nun die schließende Klammer mit rein:
das ist doch super! ... mit einem qstring
str.replace(QString("]"), QString("")); hast du sie auch raus... oder?
wenn ich das hatte machen sollen .... dann alles in einen list... QStringList
QString str = "Arial,Helvetica,Times,Courier";
QStringList list = str.split(",");
// list: ["Arial", "Helvetica", "Times", "Courier"]
splitt (][) in deinem fall... mit space "] [" wenn immer gleich....
Verfasst: 3. Mai 2006 15:45
von sascha
Jau ich mache das auch mit einem QString split, allerdings mit QRegEx als Parameter der Funktion...
Ich dachte mir halt das ich genau das hantieren mit replace dann nicht machen muss....
Aber im Zweifel ist das auch eine Lösung ja...
Verfasst: 3. Mai 2006 15:50
von patrik08
Code: Alles auswählen
string ="[Text] [Text 1 hjh] [jdhasjhdkj]";
string.prepend("] "); /* space after */
string.append(" ["); /* space before */
and dann splitten ..... wie mein beispiel oben..
dann sind sie garantiert sauber ohne [] .....
Verfasst: 3. Mai 2006 15:51
von Christian81
Mist, war ein falscher Hinweis - das kommt davon wenn man zu wenig mit RegExp's arbeitet...
Damit funktioniert es:
Code: Alles auswählen
QRegExp rx("(?:\\[([^\\]]+)\\])");
QString str="[Text] [Text 1 hjh] [jdhasjhdkj]";
int pos = rx.indexIn(str);
if(pos!=-1) {
for( pos; (pos = rx.indexIn(str,pos)) != -1; ) {
fprintf(stderr,"%s\n\n",rx.cap(1).toLatin1().constData());
pos++;
}
}
Man muss ja nur festlegen was man will, nicht was sonst noch so rumschwirrt

Wenn eine Erklärung der RegExp nötig ist, bitte melden.
Verfasst: 3. Mai 2006 15:55
von sascha
Christian81 hat geschrieben:
Wenn eine Erklärung der RegExp nötig ist, bitte melden.
Das wäre klasse!
Verfasst: 3. Mai 2006 16:01
von patrik08
Christian81 hat geschrieben:
Wenn eine Erklärung der RegExp nötig ist, bitte melden.
ich wollte .. lieber von dir wissen ob du die patch msvc_bcc32_412.patch vom qt-win projekt differenziert hast...
da Qlocale immer noch den bug hat auch mit der patch..
QLocale::system().name() immer c wie trolltech bug ...
und dass auf window xp professional mit serie nr MUI Multilingual...
(
http://www.stegcomputer.ch/details.asp? ... inxp-p-mui )
und auf normalen win xp it/de komm es richtig
Verfasst: 3. Mai 2006 16:08
von Christian81
Ok, ich versuchs mal.
Also wir wollen alles innerhalb von []
-> \\[(<irgendwas>)\\]
<irgendwas> kann alles ausser ']' sein
--> [^\\]]+
<irgendwas> wollen wir ausserdem capturen
--> ([^\\]]+)
und jetzt merke ich gerade dass (?: <...> ) gar nicht nötig ist. Dies ist ein grouping ohne dass es gecaptured wird.
--> alles zusammen
(?:\\[([^\\]]+)\\])
wobei eben auch
\\[([^\\]]+)\\]
gehen sollte
Verfasst: 3. Mai 2006 16:17
von Christian81
patrik08 hat geschrieben:Christian81 hat geschrieben:
Wenn eine Erklärung der RegExp nötig ist, bitte melden.
ich wollte .. lieber von dir wissen ob du die patch msvc_bcc32_412.patch vom qt-win projekt differenziert hast...
da Qlocale immer noch den bug hat auch mit der patch..
QLocale::system().name() immer c wie trolltech bug ...
und dass auf window xp professional mit serie nr MUI Multilingual...
(
http://www.stegcomputer.ch/details.asp? ... inxp-p-mui )
und auf normalen win xp it/de komm es richtig
Was hat mein Patch mit angeblichen Qt-Bugs zu tun???
Wenn du die Umgebungsvariable 'LANG' auf 'C' gesetzt hast kommt das nunmal zurück...

Verfasst: 3. Mai 2006 17:06
von patrik08
nein das mui window setz es auf ... IT nur 2 letter... bei eine master installation..
cmd && echo %LANG%
kommt "IT"
und QLocale::system().name() gibt C gross...
soll ich an alle mui window benutzer sagen sie sollen doch bitte it_CH reinschreiben... oder de_DE ..... ??
also ist
getenv("LANG") als zweite abfrage sinnvoller wenn qlocale c gibt... oder?...
Verfasst: 3. Mai 2006 17:28
von Christian81
Dann ist es ein Windows-Bug.
Wenn 'it' klein wäre würde es korrekt erkannt (gerade getestet).
Und wenn du meinst dass es ein Qt-Bug ist, dann schreib an
qt-bugs@trolltech.com