Регулярное выражение: соответствует только первый экземпляр шаблона - PullRequest
2 голосов
/ 20 июня 2019

Используя регулярное выражение для строки, нам нужно удалить весь текст перед первым экземпляром из четырех цифр в строке. У нас есть регулярное выражение, которое «работает»:

^((?!\d{4}\w).)*

Учитывая эту строку: foo-bar-spring_06-2006_02_25.rm желаемый результат: 2006_02_25.rm

Это работает - если есть только один экземпляр четырехзначного шаблона. Строка: batt-fall_01-2001-11-10_0200-0400.rm дает такой результат: 0400.rm

Он должен производить: 2001-11-10_0200-0400.rm

Примечание : длинная история, но мы не можем использовать - или _ в качестве разделителя.

Я чувствую, что мы рядом. У кого-нибудь есть предложения?

Ой!

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вместо ленивого повторения . можно использовать положительный шаблон прогнозирования:

^.*?(?=\d{4})

Демо: https://regex101.com/r/8DZDQp/1

В качестве альтернативы можно сгруппировать 4 цифры:

^.*?(\d{4})

и замените матч первой группой $1.

Демо: https://regex101.com/r/8DZDQp/3

0 голосов
/ 21 июня 2019

Вероятно, более быстрым вариантом будет игнорирование начальной и нежелательной части без использования обходных путей и с простым выражением, похожим на:

(\d{4}.*\..+)$

или:

(\d{4}.*\.[a-z]+)$

Конец$ якорь тоже не нужен, без которого он все равно будет работать.

Демо

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