QRegularExpression全局模式中的多个匹配项

时间:2015-09-23 11:12:10

标签: regex qt

我必须解析来自串行总线的tsv字符串。

要识别其他数据中的字符串,它有一个由#!组成的标题

此字符串的一个示例是:

#!  0.01    0.02    10.5

我想匹配此字符串中的浮点数,但它们的数量是未知的。

目前我正在使用此模式使用全局正则表达式

[0-9]+\.[0-9]+

它可以工作,但它不会检查标题

我该怎么做?

由于

1 个答案:

答案 0 :(得分:0)

正如 peppe 在评论中所说,您可以检查一行是否以您的标记开头,然后使用正则表达式捕获数字:

if (line.startsWith(QLatin1String("#!")))
{
    QRegExp re("([0-9]+\\.[0-9]+)");

    QStringList list;
    int pos = 0;

    while ((pos = re.indexIn(line, pos)) != -1)
    {
        double value = re.cap(1).toDouble();
        qDebug() << value;

        pos += re.matchedLength();
    }
}

另一种方法是检查整行,然后用不必要的部分拆分:

QRegExp re("^#!(\\s+[0-9]+\\.[0-9]+\\s*)+$");
if (re.indexIn(line) != -1)
{
    QStringList list = line.split(QRegExp("[^0-9\\.]");

    for (int i = 0; i < list.size(); ++i
    {
        double value = list.at(i).toDouble();
        qDebug() << value;
    }
}