QT регулярное выражение отображать полный текст вместо того, что спрашивается - PullRequest
0 голосов
/ 12 декабря 2018

У меня проблема с моим регулярным выражением здесь, где я пытаюсь получить долготу данных GPS, и вместо этого он дает мне полную координату

мой код

QRegularExpression GPSLong("((?<=,\\s)([0-9](.*?)+(W|E)))");


 while (!file.atEnd()) 
{
    QString line = file.readLine();
    i++;

    QRegularExpressionMatch matchGPSLong = GPSLong.match(line);

    if ( matchGPSLong.hasMatch()) 
    {
        QString GPSLongCoordinates = matchGPSLong.captured(0);
        qDebug()<< "Longitude : " <<GPSLongCoordinates;
    }
  //....
}

Пример line это

43 ° 31 '8,3 "с.ш., 5 ° 3' 13,2" в.д., 0 м

И результат, который я получаю,

Долгота: 43 ° 31 '8,3 "с.ш., 5 ° 3' 13,2" E

Но я ожидал

Долгота:5 ° 3 '13,2 "E

Я использую Qt 5.9.2 в Windows10 и не могу обновить его до более новой версии из-за программного обеспечения, над которым работаю

EDIT : мне удалось найти решение, вместо получения координат DMS (градусы, минуты, секунды), я переключился на DD (десятичные градусы) и затем использовал глобальное совпадение для получения QRegularExpressionMatchIterator

вот исправленный и рабочий код:

QRegularExpression GPSRegex("-|[0-9]+\\.+[0-9]+");


while (!file.atEnd()) {
    QString line = file.readLine();
    i++;

    QRegularExpressionMatch matchGPSLat = GPSRegex.match(line);
    auto matchIterator = CoordinateRegex.globalMatch(line);

    if (matchGPSLat.hasMatch()) {

        QString GPSLatCoordinates = matchGPSLat.captured(0);
        while(matchIterator.hasNext())
        {
            auto result = matchIterator.next();
            if (!matchIterator.hasNext())
            {

                GPSLongCoordinates = result.captured(0);
            }
        }

        double GPSlat = GPSLatCoordinates.toDouble();
        double GPSLong = GPSLongCoordinates.toDouble();
    }
}

1 Ответ

0 голосов
/ 12 декабря 2018

Вы хотите:

QString GPSLongCoordinates = matchGPSLong.captured(1);

вместо:

QString GPSLongCoordinates = matchGPSLong.captured(0);

0-индекс захвата - это полное совпадение.Если какие-либо группы совпадают, эти группы, начинающиеся с индекса 1, являются соответствующими совпадениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...