正则表达式每两个字符分割字符串

时间:2016-09-24 12:42:14

标签: c++ qt qt4 qt5

我需要处理一些看起来像QString的{​​{1}},我想将其转换为" 12 ab, 1a 2ab f 12efa ",例如QStringList

("12", "ab", "1a", "2a", "b", "f", "12", "ef", "a")

输出:

QString string("  12 ab, 1a, 2ab f 12efa    ");
QStringList list;
list = string.split(QRegularExpression("[\\s|,]"), QString::SkipEmptyParts);

因此,如果正则表达式能够每两个分割一次,我可以使用("12", "ab", "1a", "2ab", "f", "12efa") 进行分割。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

使用不同的正则表达式更容易,然后使用QRegularExpressionMatchIterator将匹配项添加到QStringList

([\\w]{1,2}])正则表达式将匹配并捕获一对连续的word characters或单个字符。

查看以下代码,看看这是否是您所需要的。

#include <QString>
#include <QStringList>
#include <QDebug>
#include <QRegularExpression>

int main(void)
{
    QString string("  12 ab, 1a, 2ab f 12efa    ");

    QRegularExpression re("([\\w]{1,2})");
    QRegularExpressionMatchIterator i = re.globalMatch(string);

    QStringList list;
    while (i.hasNext()) {
        QRegularExpressionMatch match = i.next();
        QString word = match.captured(1);
        list << word;
    }

    qDebug() << list;

    return 0;
}