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