dethain
@dethain
Верстальщик

Не берет во всю длину, как быть?

Есть текст
[0] Машина прибыла в течение 6 сек., расстояние 2.149 км
[1] Машина прибыла в течение 35 сек., расстояние 149 м
[2] Машина прибыла в течение 2:58 мин., расстояние 764 м
Для меня важно отловить машины, которые прибыли недавно (значит мне нужно брать секунды), их номер в листе заказов и расстояние до них.
Я написал что-то такое:
\[(\d+)\].+сек.+(\d?\.?\d+) к?м
Но на выходе я получил такие данные:
-> 0, 9
-> 1, 9
Но я желаю получить:
-> 0, 2.149
-> 1, 149
Он берёт только последнюю цифру, так как это тоже удовлетворяет условию, но мне нужно что бы он брал всё число, какие варианты решения могут быть?
Пожалуйста не предлагайте решения в стиле:
\[(\d+)\].+сек.+расстояние (\d?\.?\d+) к?м
так как там может быть вовсе и не расстояние, а разные слова, например даже такое чудо:
[2] Машина прибыла в С?РёЅС‹ 23 сек., СЃС?иренный РїРѕРёСЃРє 764 м
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
dollar
@dollar Куратор тега Lua
Делай добро и бросай его в воду.
\[(\d+)\].+сек.+?(\d?\.?\d+) к?м

.+ - жадный поиск, хватает всё, что может. А чтобы выражение подошло, допустимо захватить всё, кроме последней цифры.
Так что самое простое решение - сделать этот захват ленивым.

UPD: под Lua:
string.match(str, "%[([0-9]+)%].+сек.-([0-9]?%.?[0-9]+) к?м")
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы