【问题标题】:Qt - Extracting words with the first letter in uppercase from a QStringQt - 从QString中提取首字母大写的单词
【发布时间】:2016-12-22 14:44:49
【问题描述】:

我有一个名为text 的长QString,我希望提取其中的所有单词,它们的第一个字母为大写。有没有办法使用QString::split() 方法分别测试每个单词?甚至是一种无需拆分text 的方法?

【问题讨论】:

  • 正则表达式。例如,在 Qt 中,您可以使用 QRegularExpression 类。要创建您的表达式,我建议regex101.com 在线正则表达式编辑器。

标签: qt qstring


【解决方案1】:

怎么样:

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&lt;QString&gt;(或 QStringList,如果您愿意,但不鼓励使用)。

【讨论】:

    【解决方案2】:

    不拆分:

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

    【讨论】:

    • QRegExp 已过时,只是为了向后兼容而成为 Qt 的一部分。它不应该在新代码中使用...
    猜你喜欢
    • 1970-01-01
    • 2011-06-05
    • 2020-08-30
    • 2017-08-02
    • 2013-12-15
    • 1970-01-01
    • 2016-02-15
    • 2016-12-05
    • 2015-11-10
    相关资源
    最近更新 更多