crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> помогите с QRegExp, нужно парсить строки
electronik
  опции профиля:
сообщение 17.8.2012, 14:19
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 23
Регистрация: 16.6.2012
Пользователь №: 3424

Спасибо сказали: 1 раз(а)




Репутация:   0  


Доброго времени.
Помогите с парсингом файла. есть файл вида
Вася Пупкин         1
Таня Гротер          3
12 Оля                  2
14 Петя                 2


Я уже всё голову сломал, как отпарсить эти строки.
Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
iReset
  опции профиля:
сообщение 17.8.2012, 16:16
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 178
Регистрация: 6.6.2012
Пользователь №: 3414

Спасибо сказали: 23 раз(а)




Репутация:   2  


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

А что необходимо получить на выходе?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
electronik
  опции профиля:
сообщение 17.8.2012, 17:09
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 23
Регистрация: 16.6.2012
Пользователь №: 3424

Спасибо сказали: 1 раз(а)




Репутация:   0  


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
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Цитата(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. не забывай удваивать слеши, не \ а \\

Сообщение отредактировал Sokoloff - 17.8.2012, 17:51
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
electronik
  опции профиля:
сообщение 17.8.2012, 17:56
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 23
Регистрация: 16.6.2012
Пользователь №: 3424

Спасибо сказали: 1 раз(а)




Репутация:   0  


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

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.4.2021, 19:25