Мне удалось найти совет только о том, как сопоставить количество подстрок в любом порядке или разделенных максимум n словами (не обоими одновременно).
Мне нужно реализовать условие в python, где несколько терминов появляются в любом порядке, но разделены, например, максимум одним словом или рядом. Я нашел способ реализовать часть «в любом порядке», используя обходные пути, но он не учитывает смежные / разделенные не более чем одним словом проблемы. Для иллюстрации:
re.search("^.*(?=.*word1\s*\w*\sword2)(?=.*\w*)(?=.*word3\w*).*$", "word1 filler word2 and word3")
Это должно совпадать с "word1 word2"
или "word1 max1word word2"
и "word3*"
в любом порядке, разделенными одним словом, как в данном случае - что и происходит. Тем не менее, он также соответствует строке, где термины разделены двумя или более словами, что не следует. Я попытался сделать это следующим образом:
re.search("^.*(?=\s?word1\s*\w*\sword2)(?=\s?\w*)(?=\s?word3\w*).*$", "word1 word2 word3")
, надеясь, что использование \s?
в начале каждого термина в скобках вместо .*
исправит это, но это не работает вообще (нет совпадения, даже когда должен быть один).
Кто-нибудь знает решение?
В реальных шаблонах, которые я ищу, это больше, чем просто две отдельные строки, поэтому выписать каждую возможную комбинацию невозможно.