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

1

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

Например:

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

в

312415 red, gree, yellow-white, snowy CDEFASE

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

в

29321093123 one, two, three #four IRUASJDJADALLDLA

Как вы можете видеть, спереди и сзади средних частей строки я имею тот же шаблон:

фронт :\d+

назад: [AZ] +

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

  • 0
    Вы не можете использовать квантификаторы (т. Е. * , + , {n} ) в видоискателях в большинстве движков RegEx. Лучшая альтернатива - просто использовать группу захвата.
  • 0
    C # является категорией в этом вопросе, и в .net вы, конечно, можете использовать квантификаторы в вид сзади.
Теги:
lookahead
lookbehind

3 ответа

3
Лучший ответ

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

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

DEMO

1

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

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

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

  • 0
    Я смущен тем, что вы говорите, что не можете смотреть назад и смотреть вперед одновременно , а затем следуйте примеру, который использует их одновременно в одном и том же регулярном выражении.
  • 0
    Это слово «одновременный» ... вопрос показывает, что он знает, что такое предвкушение, и он знает, что такое взгляд, но он хотел чего-то, что было бы комбинацией двух. Я говорил, что не существует. Но вы можете использовать lookbehind и lookahead в одном и том же шаблоне регулярных выражений, точно так же, как вы обычно используете lookbehind или lookahead. Нет ничего особенного в использовании их обоих в шаблоне.
1

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню