QRegularExpression, чтобы найти число c часть имени файла - PullRequest
1 голос
/ 16 апреля 2020

У меня есть полный путь к файлу, доступному в 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. Что я здесь не так делаю?

1 Ответ

1 голос
/ 16 апреля 2020

Вы попросили вернуть значение группы захвата # 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();
}

Группа 0 является полным совпадением.

Кроме того, шаблон, подобный [1-9]+, не будет соответствовать 10 или 200, поэтому я предлагаю использовать [1-9][0-9]*: a не 0 di git, за которым следуют 0 или более цифр.

...