c++ - QRegularExpression查找文件名的数字部分

标签 c++ regex qt qregularexpression

我在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。在这里我在做什么错?

最佳答案

您要求使用 .captured(1) 返回捕获组#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();
}

0组是整个匹配项。

另外,像[1-9]+这样的模式将不匹配10200,因此,我建议使用[1-9][0-9]*:一个非0的数字,后跟0或多个数字。

关于c++ - QRegularExpression查找文件名的数字部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61251497/

相关文章:

c++ - 无需显式类型转换的运算符重载

regex - sed 替换部分字符串

c++ - 删除其中一个小部件后如何在特定位置设置 QGridLayout

qt - TableView 上的 Keys.onPressed 调用了两次

c++ - 我可以使用 Qt 4.8.4 为 Windows 2000 进行部署吗?

c++ - 带字符串检查的哈希表

c++ - __func__ 值在 C 和 C++ 之间的区别

正则表达式匹配由两个逗号分隔的三个单词

PHP PCRE解析javascript代码

c++ - 命名空间中的主要内容