ich versuche mit dem folgenden Code einen QString in ein QList zu überführen. Als Beispiel soll "(das) Essen" zu ["das Essen", "Essen"] führen, oder "eine Menge, viel" soll zu ["eine Menge", "viel"] führen.
Mein derzeitiger Code ist leider nicht flexibel genug, soll heißen es wird nur ein einfacher Klammer-Ausdruck berücksichtigt, wenn ich allerdings z.b. "(o, a) tenista" habe versagt mein Code, da in der Klammer ein Komma ist, was mein Code falsch interpretieren würde. Wünschen würde ich mir das mein Code mit EINEM Klammer-Ausdruck und mit beliebig vielen Kommas in diesem Klammer-Ausdruck klar kommt. Außerhalb von Klammer-Ausdrücken sind ja beliebig viele Kommas erlaubt.
Hier mein jetziger Code:
Code: Alles auswählen
void KEduVocText::setList( const QString & expr )
{
Qlist liste = expr.simplified().split(",", QString::SkipEmptyParts);
QList modListe;
foreach(Qstring str, liste) {
if ( str.contains( QRegExp("\(.*\)") ) ) {
modListe << str.replace( QRegExp("\(([^<]*)\)"), "" ).simplified()
<< str.replace( QRegExp("\(([^<]*)\)"), "\\1" ).
simplified();
}
else {
modListe << str;
}
}
d->m_list = modListe;
}
EDIT: Der Ausdruck "expression1 (irgendwas, weiter was) expression2", sollte auch zu einem korrektem Ergebnis führen.