2016-12-22 90 views
2

我有一个很长的QString,名为text,我正在寻找提取其中第一个字母为大写的所有单词。有什么方法可以使用QString::split()方法分别测试每个单词吗?或甚至一种方法来做到这一点,而不必分裂textQt - 从QString中提取第一个字母大写的单词

+0

正则表达式。在Qt中,您可以使用QRegularExpression类。为了创建你的表情,我建议使用https://regex101.com/在线regexp编辑器。 – Resurrection

回答

0

什么:

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()); 

的正则表达式匹配一切从一个大写字母向前推,直到下一个大写字母。然后,因为你想要所有的匹配,你遍历它们并将它们保存到QVector<QString>(或者QStringList,如果你愿意,尽管它不鼓励使用)。

0

没有分裂:

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'已过时,只是为了向后兼容而成为Qt的一部分。它不应该用于新代码中... – Resurrection

相关问题