Я намагаюся написати код пошуку регулярного виразу для наступної ідеї -
sentence one BEFORE {sentence2 AND sentence 3}
3 фрази, sentence one
, sentence2
і sentence 3
надаються коду окремо.
Я з легкістю можу це зробити
re.search(sentence one.*?sentence2) AND re.search(sentence one.*?sentence 3)
,
але я думав, чи є спосіб висловити оригінальну ідею в межах одного виразу. Я використовую Python.
EDIT - Просто хотілося згадати, що не обов'язково існувати всі фрази. Для уточнення, результуючий регулярний вираз буде правилом. Якщо будь-який з sentence2
або sentence 3
існують у файлі, він повинен задовольняти його, і якщо обидва існують, то теж. Якщо sentence one
не існує у файлі, то це буде марно.
Відповіді:
1 для відповіді № 1Я думаю, що найбільш ясний спосіб - це зробити за допомогою керуючого потоку, як ви.
Ви могли б зробити щось подібне
sentence 1 then (sentence 2 then sentence 3 or sentence 3 then sentence 2)
тобто
sentence one.*?(?:sentence two.*?sentence three|sentence three.*?sentence two)
але, очевидно, це набагато менш читабельне і не узагальнюване.
Зауважимо, що все це припускає, що речення не перетинаються.