Я пытаюсь построить регулярное выражение несколько, как это:Regex: отрицательный взгляд вперед между двумя матчами
[match-word] ... [exclude-specific-word] ... [match-word]
Это похоже на работу с отрицательным заглядывая вперёд, но я бегу в проблему когда у меня есть такой случай:
[match-word] ... [exclude-specific-word] ... [match-word] ... [excluded word appears again]
Я хочу выше предложение, чтобы соответствовать, но отрицательным смотреть вперед между первым и вторым соответствующим словом «перетекает», так что второе слово никогда не совпадают.
Давайте рассмотрим практический пример.
Я не согласен со всеми предложениями, в которых есть слово «i» и слово «пирог», но не слово «ненависть» между этими двумя словами. У меня есть эти три предложения:
i sure like eating pie, but i love donuts <- Want to match this
i sure like eating pie, but i hate donuts <- Want to match this
i sure hate eating pie, but i like donuts <- Don't want to match this
У меня есть это регулярное выражение:
^i(?!.*hate).*pie - have removed the word boundaries for clarity, original is: ^i\b(?!.*\bhate\b).*\bpie\b
который соответствует первое предложение, но не второй, так как отрицательный взгляд вперед сканирует всю строку.
Есть ли способ ограничить негативный внешний вид, чтобы он был удовлетворен, если он встречает «пирог», прежде чем он встретит «ненависть»?
Примечание: в моей реализации, могут существовать и другие термины, следующих за этим регулярное выражение (оно динамически собираемого из поисковой грамматике двигателя), например:
^i(?!.*hate).*pie.*donuts
настоящее время я использую JRegex, но, вероятно, может переключиться в JDK Regex при необходимости
Update: Я забыл упомянуть, что-то в моем первоначальный вопрос:
Вполне возможно, что «негативный конструкт» существует далее в сэнтэ nce, и я хочу соответствовать предложению, если это возможно, даже если «отрицательная» конструкция существует дальше.
Для уточнения, посмотрите на эти предложения:
i sure like eating pie, but i love donuts <- Want to match this
i sure like eating pie, but i hate donuts <- Want to match this
i sure hate eating pie, but i like donuts <- Don't want to match this
i sure like eating pie, but i like donuts and i hate making pie <- Do want to match this
ответ Роба работает отлично для этого дополнительного ограничения, поэтому я принять этот один.
белого пространство в регулярном выражении не помогает читаемости, его только запутанный – Aprillion
@death Пробелы действует в питоне регулярного выражении, с «многословным» флагом. Сбив с толку, полезный для меня ... у нас разные мнения. (Это также легко отредактировать.) – rob
, так почему же вы не использовали пробел в своем примере на python? – Aprillion