Regex одновременный взгляд вперед и назад

Я пытаюсь написать регулярное выражение, которое совпадает с шаблоном спереди и шаблоном сзади моего текущего персонажа.

Например:

красный, зеленый, желто-белый, снежный

в

312415 red, gree, yellow-white, snowy CDEFASE

один два три четыре

в

29321093123 one, two, three #four IRUASJDJADALLDLA

Как видите, спереди и сзади средних частей струны у меня одинаковый рисунок:

спереди: \d+

назад: [AZ]+

Как я могу это сделать?

3 ответа

Решение

Используйте приведенное ниже регулярное выражение и получите нужную строку из индекса группы 1.

\d+\s+(.*?)\s+[A-Z]+

DEMO

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

Начнем с просмотра за строкой, который проверяет строку, состоящую из цифр и пробела (?<=\d+ )Подходим любые символы в середине .+Затем завершите заглядывание, соответствующее пробелу, за которым следуют одна или несколько букв (?= [A-Z]+)

Положите все это вместе, и вы получите (?<=\d+ ).+(?= [A-Z]+)

Lookaheads и Lookbehinds - это не то, что вы думаете. Они являются утверждениями нулевой ширины, то есть они ничего не соответствуют, а только проверяют наличие / отсутствие шаблона.

Здесь вы хотите сопоставить количество цифр, за которыми следует серия символов, которые затем следуют за другой последовательностью символов верхнего регистра. Как вы можете захватить материал в середине? Вы можете использовать скобки. Они фиксируют матч по мере прохождения и сохраняют его для последующего использования. Часть (.*?) В ответе AVinash - это та часть, которая фактически захватывает нужный вам текст.

Другие вопросы по тегам