revert QString oder revert QList

Alles rund um die Programmierung mit Qt
Antworten
dermoritz
Beiträge: 21
Registriert: 27. April 2009 09:37

revert QString oder revert QList

Beitrag von dermoritz »

bevor ich es selber schreibe wollte ich mal fargen ob es funktionen zum umdrehen von listen und/oder strings gibt.

ich brauche es unter anderem um strings mit regexp's rückwärts zu vergleichen.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Eine QList umzudrehen halte ich nicht für sinnvoll, schließlich kann man einen Iterator oder eine Schleife auch rückwärts laufen lassen.

Beim QString wäre event. die Möglichkeit die Regex umzudrehen. Dürfte bei vielen QString's auf jeden Fall performanter sein, als alle Strings umzudrehen.
dermoritz
Beiträge: 21
Registriert: 27. April 2009 09:37

Beitrag von dermoritz »

die frage ist was es heißt einen regexp umzudrehen - sein string pattern einfach rückwärts zu lesen ist falsch.

man muss die "einheiten" des regexp umdrehen, z.b. durch () definiert. in meinem fall muss ich eine funktion anbieten die ein gewissen zahlenformat sowohl von links nach rechts liest als auch von rechts nach links eingetippt.
und in einem (korrigiertem format) zurückgibt.

meine lösung für das rückwärts vergleichen ist im moment folgende:

-string drehen
-die einheiten des regexp drehen (einheiten werden über qstrinlist angelegt, liste wird gedreht)
-beides vergleichen
-für das ausgeben werden alle korrekten teile mit qregexp.capturedtext in eine liste gepackt
-vor dem ausgeben/formatieren muss sowohl die liste wieder gedreht als auch alle enthaltenen strings

ich könnte mir ein haufen dreherei sparen wenn man mit regexps vonvon rechts nach links vergleichen könnte.kann man eventuell die "capture klammern" so setzen das so etwas passiert per standard sind die ja "greedy":
(\d{,5}(\d{3})) geht das? (zuerst 3 digits äußerst rechts suchen und dann maximal 5 digits links daneben). für 12345 sollte dann cap(1)="12345" und cap(2)="345" sein??
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du drehst alles um? RegEx und String?

Und warum von Rechts nach Links suchen. Wenn dann sucht man doch am Ende oder? ($)

Die komplette RegEx läßt sich auf Non-Greedy mit setMinimal setzen.

Solltest du eine leistungsfähigere RegEx-Engine suchen, würde ich mal bei den Trolltech-Labs suchen, ich meine daß ich dort vor kurzem was gelesen habe.
dermoritz
Beiträge: 21
Registriert: 27. April 2009 09:37

Beitrag von dermoritz »

ich hab inzwischen: int QRegExp::lastIndexIn gefunden. das such von hinten. habs noch nicht getestet.

"nicht greedy" reicht leider nicht denn für "12345" brauche ich immer 4 digits im letzten block. für 12345678 brauche ich 4 im letzten 3 im vorletzten und was übrig bleibt im rest.

ich hoffe per oben genannter funktion muss ich den string nicht drehen - die blöcke des regexp muss ich nach wie vor drehen wenn ich die leserichtung umschalten will.
Antworten