Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ помогите с QRegExp

Автор: electronik 17.8.2012, 14:19

Доброго времени.
Помогите с парсингом файла. есть файл вида

Вася Пупкин         1
Таня Гротер          3
12 Оля                  2
14 Петя                 2


Я уже всё голову сломал, как отпарсить эти строки.
Спасибо.

Автор: iReset 17.8.2012, 16:16

Цитата(electronik @ 17.8.2012, 15:19) *
Я уже всё голову сломал, как отпарсить эти строки.

А что необходимо получить на выходе?

Автор: electronik 17.8.2012, 17:09

Qstring = "Вася Пупкин"
int = "1"

Вот часть кода как парсится файл.

QTextStream in(&file);
        QString line = in.readLine();
        QRegExp rx("((\d\d?$))");
        while(!line.isNull()) {
            line = in.readLine();
            int pos = rx.indexIn(line);
            QStringList list;
            list = rx.capturedTexts();
            if(!list.isEmpty()){
                QString cap1 = rx.cap(1);
                int cap2 = rx.cap(2).toInt();
         }
}

получается что cap1="Вася Пупкин"
a cap2="1"

Автор: Sokoloff 17.8.2012, 17:46

Цитата(electronik @ 17.8.2012, 18:09) *
получается что cap1="Вася Пупкин"
a cap2="1"


    QString str = QString::fromUtf8("12 Оля                  22");
    QRegExp re("(.*\\S)\\s+(\\d+)");

    if (re.exactMatch(str)) {
         QString name = re.cap(1);
         QString num = re.cap(2);
         qDebug() << "Name:" << name << " num:" << num;
    }

К сожалению в Qt нельзя указать жадность для конкретного квантификатора, поэтому (.*\\S)

P.s. не забывай удваивать слеши, не \ а \\

Автор: electronik 17.8.2012, 17:56

Спасибо огромное!! Заработало!!))
А про двойные слэши я в курсе, просто с другого сайта копипастил и забыл вторые проставить.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)