con-f-use
Erfahrenes Mitglied
Moin,
mit dem Folgenden QRegExp will ich aus einem String (eignetlich einer Datei) alle Zeilen raussuchen, die dem Pattern ensprechen. Hier sind es jetzt Zeilen, die beliebig viele bzw. gar keine Whitespaces an Zeilenanfang und -ende haben können. Dazwischen sind genau fünf Zahlen, die durch beliebig viele Whitespaces getrennt werden. Der echte RegExp ist natürlich etwas komplizierter.
Soweit ist das kein Problem. Nun hätte ich aber gerne noch zusätzlich die einzelnen Zahlen, die durch das (\\d) gematcht werden und zwar alle fünf pro Zeile (in der ersten wären das als "1", "3", "2" und "4" ).
Über die capturedText()-Funktion scheint das aber nicht zu gehen. Es wird immer nur die letzte Zahl einer Zeile zurück gegeben - die anderen sind anscheinend nicht gespeichert.
Ich würde aus Performance-Gründen ungern eine zweite Schleife einbauen in der ich dann nochma die einzelnen Zahlen extrahiere. Das erschiene mir auch etwas unschön, weil ja eigentlich die Zahlen schon gematcht sind.
Mein Frage ist jetzt: Gibt es eine Möglichkeit an die bereits in testPattern gematchten digits ranzukommen?
Danke und Gruß
von con-f-use
mit dem Folgenden QRegExp will ich aus einem String (eignetlich einer Datei) alle Zeilen raussuchen, die dem Pattern ensprechen. Hier sind es jetzt Zeilen, die beliebig viele bzw. gar keine Whitespaces an Zeilenanfang und -ende haben können. Dazwischen sind genau fünf Zahlen, die durch beliebig viele Whitespaces getrennt werden. Der echte RegExp ist natürlich etwas komplizierter.
Soweit ist das kein Problem. Nun hätte ich aber gerne noch zusätzlich die einzelnen Zahlen, die durch das (\\d) gematcht werden und zwar alle fünf pro Zeile (in der ersten wären das als "1", "3", "2" und "4" ).
C:
#include <QRegExp>
#include <QString>
#include <QStrinList>
QString inputString = "foo\n 1\t 3\t\t2 4\t \t5\n9 7 8 6 10\nbar";
QRegExp testPattern("^(\\s*(\\d)){5}\\s*$");
/* Folgende Zeile entfällt natürlich im Originalscript,
* weil ich die Datei zeilenweise auslese */
QStrinList lines = inputString.split("\n");
for(int i=0; i<lines.size(); ++i) {
if( testPattern.indexIn( lines.at(i)) > -1 ) {
// Hier hätte ich gerne die einzelnen digits aus testPattern
}
}
Ich würde aus Performance-Gründen ungern eine zweite Schleife einbauen in der ich dann nochma die einzelnen Zahlen extrahiere. Das erschiene mir auch etwas unschön, weil ja eigentlich die Zahlen schon gematcht sind.
Mein Frage ist jetzt: Gibt es eine Möglichkeit an die bereits in testPattern gematchten digits ranzukommen?
Danke und Gruß
von con-f-use
Zuletzt bearbeitet: