doza_and
Это не И а оператор следования, что и в документации написано. И в данной области применения логически невозможен
ну вобщем таки да, наверно я неправильно выразился, конечно же это не полноченное И так как оно ищет только в стройгой последовательности, на что я указал ниже.
полноценно же пересечение в re возможно сымитировать с помощью опережающих проверок, и в этом случае AND будет просто последовательным перечислением выборки.
Например для выражения монитор AND (белый OR черный) регулярка будет выглядеть както так:
'(?=.*\b[Мм]онитор\b)(?:(?=.*\bбелый\b)|(?=.*\bчерный\b))(.*)'
при этом оно захватит сочетание слов “монитор” и “белый”|“черный” в любой последовательности.
import re
s = '''Монитор большой белый
монитор маленький белый
Монитор маленький черный
Телевизор маленький черный
еще монитор условно белый
Монитор чернобелый
белый монитор без подставки
черный телевизор без пульта
черный монитор без БП
черный монитор маленький
большой белый телевизор
'''.strip().split('\n')
for line in s:
res = re.findall(r'(?=.*\b[Мм]онитор\b)(?:(?=.*\bбелый\b)|(?=.*\bчерный\b))(.*)',line)
if res:
print(res)
>>>
['Монитор большой белый']
['монитор маленький белый']
['Монитор маленький черный']
['еще монитор условно белый']
['белый монитор без подставки']
['черный монитор без БП']
['черный монитор маленький']
>>>
ЗЫ вопрос целесообразности такого подхода предлагаю оставить за бортом.
ЗЗЫ топискстартеру немного ликбеза
https://habr.com/post/143857/