Использование ИЛИ в регулярных выражениях

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

  1. Ваш результат по продажам продукта ХХХ один из лучших.
  2. Вы один из лучших по продаже продукта ХХХ в магазине.

Как написать одно регулярное выражение для учета двух случаев?

Для первого я пишу так: r'продукта ([\w\s+]+?)один'

Для второго: r'продукта ([\w\s+]+?)в'

Объединение через логическое или не дает нужный результат: r'продукта ([\w\s+]+?)в|один'.

Скорее всего я неправильно использую ИЛИ.

Есть ли способ объединить корректно? Делаю в python, но скорее всего это не важно.

P.S.: в качестве ХХХ может выступать словосочетание неизвестной длины.


Ответы (1 шт):

Автор решения: ipatev_nn
(?<=продукта ).*?(?= один | в )
  • (?<=продукта ) - Позитивнос смотрим назад и ищем текст продукта c символом пробела
  • .* - любое количество, любых символов, а ? делает более ленивым квантификатор
  • (?= один | в ) - позитивный просмотр вперед, где есть либо символ пробел и текст один или текст в после которых есть пробел

Пример https://regex101.com/

→ Ссылка