Regex одновременный взгляд вперед и назад
Я пытаюсь написать регулярное выражение, которое совпадает с шаблоном спереди и шаблоном сзади моего текущего персонажа.
Например:
красный, зеленый, желто-белый, снежный
в
312415 red, gree, yellow-white, snowy CDEFASE
один два три четыре
в
29321093123 one, two, three #four IRUASJDJADALLDLA
Как видите, спереди и сзади средних частей струны у меня одинаковый рисунок:
спереди: \d+
назад: [AZ]+
Как я могу это сделать?
3 ответа
Используйте приведенное ниже регулярное выражение и получите нужную строку из индекса группы 1.
\d+\s+(.*?)\s+[A-Z]+
Вы не можете одновременно оглядываться назад и смотреть в будущее, но вы можете использовать их отдельно так же, как обычно.
Начнем с просмотра за строкой, который проверяет строку, состоящую из цифр и пробела (?<=\d+ )
Подходим любые символы в середине .+
Затем завершите заглядывание, соответствующее пробелу, за которым следуют одна или несколько букв (?= [A-Z]+)
Положите все это вместе, и вы получите (?<=\d+ ).+(?= [A-Z]+)
Lookaheads и Lookbehinds - это не то, что вы думаете. Они являются утверждениями нулевой ширины, то есть они ничего не соответствуют, а только проверяют наличие / отсутствие шаблона.
Здесь вы хотите сопоставить количество цифр, за которыми следует серия символов, которые затем следуют за другой последовательностью символов верхнего регистра. Как вы можете захватить материал в середине? Вы можете использовать скобки. Они фиксируют матч по мере прохождения и сохраняют его для последующего использования. Часть (.*?) В ответе AVinash - это та часть, которая фактически захватывает нужный вам текст.