2016-12-22 2 views
2

Ich habe eine lange QString namens text, und ich bin auf der Suche nach alle Wörter darin, die ihren ersten Buchstaben in Großbuchstaben haben extrahieren. Gibt es eine Möglichkeit, die Methode QString::split() zu verwenden, um jedes Wort einzeln zu testen? Oder sogar eine Möglichkeit, es zu tun, ohne text teilen zu müssen?Qt - Extrahieren von Wörtern mit dem ersten Buchstaben in Großbuchstaben von einem QString

+0

Regulärer Ausdruck. In Qt können Sie beispielsweise die Klasse QRegularExpression verwenden. Um Ihren Ausdruck zu erstellen, empfehle ich https://regex101.com/ online regexp editor. – Resurrection

Antwort

0

Was:

QString text = "Text is long. Or maybe longer. Yay!"; 
QRegularExpression regexp("[A-Z][^A-Z]*"); 
QRegularExpressionMatchIterator match = regexp.globalMatch(text); 
QVector<QString> vec; 

while(match.hasNext()) 
    vec.append(match.next().capturedTexts()); 

Der reguläre Ausdruck paßt alles von einem Großbuchstaben nach vorne bis zum nächsten Großbuchstaben. Dann, da Sie alle Übereinstimmungen wollten, durchlaufen Sie sie und speichern sie auf QVector<QString> (oder QStringList, wenn Sie es wünschen, obwohl es von der Verwendung abgeraten wird).

0

Ohne Spaltung:

QRegExp rx("\\b[A-Z]\\w+\\b"); // Or "\\b[A-Z]\\w*\\b" if you want to include one-character words 

int pos = 0; 

while ((pos = rx.indexIn(text, pos)) != -1) 
{ 
    QString your_word = rx.cap(); // every word is here 
    pos += rx.matchedLength(); 
} 
+0

'QRegExp' ist veraltet und ist nur aus Gründen der Abwärtskompatibilität Teil von Qt. Es sollte nicht in neuem Code verwendet werden ... – Resurrection

Verwandte Themen