Есть текст, типа: "Осталось 10 часов 15 минут 12 секунд". Некоторые компоненты (часы, минуты, секунды) могут отсутствовать. Нужно выдернуть циферки и соотнести с часами, минутами, секундами.
Делаю так:
Осталось\s+(?!(\d+)\s+(час).*?)(?!(\d+)\s+(минут).*?)(?!(\d+)\s+(секунд).*?)
Текст подходит под регулярное выражение, но от него всегда остается только "Осталось " при любых комбинациях час., мин., сек.
P.S. Нашел информацию по (?!...). Они, оказывается, используются только для проверки, но ничего не выводят.
Каким образом можно одновременно проверить наличие фрагментов и выдернуть данные?
Ответ
Нужно использовать комбинацию из проверяемой части и захватывающей части. Примерно вот так:
Осталось\s+((?
После обработки в именованных группах будут требуемые значения.
Демо тут (спасибо за наводку @stribizhev)
Комментариев нет:
Отправить комментарий