QRegularExpression 查找文件名的数字部分
QRegularExpression to find numeric part of file name
我在 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();
}
这总是 returns myNum 为 0。我在这里做错了什么?
您要求 return 使用 .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]+
这样的模式不会匹配10
或200
,因此,我建议使用[1-9][0-9]*
:非0数字后跟0或更多数字。
我在 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();
}
这总是 returns myNum 为 0。我在这里做错了什么?
您要求 return 使用 .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]+
这样的模式不会匹配10
或200
,因此,我建议使用[1-9][0-9]*
:非0数字后跟0或更多数字。