1

我有一个 Qstring 中可用的文件的完整路径

Qstring str = "d://output/File_012_xyz/logs";

我想从中提取数字 12。

我尝试过这样的事情

QRegularExpression rx("[1-9]+");

QRegularExpressionMatchIterator i = rx.globalMatch(str );
if (i.hasNext())
{
    QRegularExpressionMatch match = i.next();
    QString word = match.captured(1);
    quint32 myNum = word.toUInt();
}

这总是将 myNum 返回为 0。我在这里做错了什么?

4

1 回答 1

1

您要求返回一个捕获组 #1 值.captured(1),但您的正则表达式中没有定义捕获组。

您可以使用

QRegularExpression rx("[1-9][0-9]*");

QRegularExpressionMatchIterator i = rx.globalMatch(str );
if (i.hasNext())
{
    QRegularExpressionMatch match = i.next();
    QString word = match.captured(0);         // <<< SEE HERE
    quint32 myNum = word.toUInt();
}

0th 组是全场比赛。

此外,模式 like[1-9]+将不匹配10or 200,因此,我建议使用[1-9][0-9]*: 非 0 数字后跟 0 或更多数字。

于 2020-04-16T13:35:47.960 回答