У меня проблема с моим регулярным выражением здесь, где я пытаюсь получить долготу данных 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();
}
}