LINUX.ORG.RU

QRegExp не работает

 , ,


0

1

Хочу регуляркой считать из файла числа. Из файла

    Average: 
    Z  1: 0.0400665
    Z  2: -0.0789776
    Z  3: -0.185088
    Z  4: 0.0174681
    Z  5: 0.0344385
    Z  6: 0.0488381
    Z  7: -0.0290117
    Z  8: -0.0167767
    Z  9: 0.187083
    Z 10: 0.232811
    Z 11: 0.219002
    Z 12: 0.082035
    Z 13: 0.233757
    Z 14: 0.167059
    Z 15: 0.188123
    Z 16: 0.137755
    Z 17: -0.00718205
    Z 18: -0.0548681
    Z 19: 0.0604202

QString line = file.readAll(); QRegExp reg_exp; reg_exp.setPattern(«Average:\s+[\s\S]*?Z\s+1:\s+(\S+)»);

qDebug() << «patern» << reg_exp.pattern() << «valid» << reg_exp.isValid();

    if(reg_exp.indexIn(line) != -1)
    {
        QString Z_val = reg_exp.cap(1);

        qDebug() << "i" << i << "Z_val" << Z_val;
    }
    else
    {
        qDebug() << "failed parse Z";
    }

Вывод:

patern «Average:\s+[\s\S]*?Z\s+1:\s+(\S+)» valid false failed parse Z

Подскажите где ошибка, почему это не работает. Пытаюсь считать первое число из файла.



Последнее исправление: user2132 (всего исправлений: 3)

Потому что у тебя в регэкспе какая-то дичь. Если ты ищешь числа, попробуй так: -{,1}\\d+\\.{,1}\\d*. И вообще, для чисел тебе тут регэксп не нужен, достаточно QTextStream/QDataStream

XMs ★★★★★
()

Зачем тебе тут регулярка? Сделай split по пробелу в вектор и забери второй элемент, если он есть. Так будет быстрее и проще.

crutch_master ★★★★★
()
Ответ на: комментарий от XMs

Ох, ну так какая разница тогда? Можно просто бегать по QString, искать где там 3-й пробел после \n и складывать всё, что после него до \n куда надо.

crutch_master ★★★★★
()
    QFile file("test.txt");
    if(!file.open(QFile::ReadOnly)) return;
    QStringList lines = QString::fromUtf8(file.readAll()).split("\n",QString::SkipEmptyParts);
    QRegularExpression reZValue("^Z(.*):(.*)$");
    foreach(QString str,lines)
    {
        str = str.simplified();
        str = str.remove(" ");
        QRegularExpressionMatch match = reZValue.match(str);
        if(match.hasMatch())
        {
            qDebug() << match.captured(1).toInt() << match.captured(2).toDouble();
        }
    }
anonymous
()
Ответ на: комментарий от anonymous2

не нужно, достаточно ассемблера.

anonymous
()
Ответ на: комментарий от crutch_master

задай себе вопрос: а как это будет работать в цикле? сам найдешь ответ! но тем кто имеет 5звезд они какбы из детского садика и им обычно помагают.. жди

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.