До обновления вопрос:
Согласно моему комментарию, я думаю, что вы используете неправильный подход. Мне кажется, вы можете просто использовать in
:
words = ['cat', 'caterpillar', 'monkey', 'monk', 'doggy', 'doggo', 'dog']
if 'cat' in words:
print("yes")
else:
print("no")
Возвращает: yes
words = ['cats', 'caterpillar', 'monkey', 'monk', 'doggy', 'doggo', 'dog']
if 'cat' in words:
print("yes")
else:
print("no")
Возвращает: no
После обновленного вопроса:
Теперь, если ваши примеры данных не соответствуют вашим потребностям, но вы заинтересованы в поиске подстроки в элементе списка, вы можете попробовать:
import re
words = ['MX_QW-765', 'RUC_PO-345', 'RUC_POLO-209']
srch = 'PO'
r = re.compile(fr'(?<=_){srch}(?=-)')
print(list(filter(r.findall, words)))
Или используя match
:
import re
words = ['MX_QW-765', 'RUC_PO-345', 'RUC_POLO-209']
srch = 'PO'
r = re.compile(fr'^.*(?<=_){srch}(?=-).*$')
print(list(filter(r.match, words)))
Это вернет список элементов (в данном случае просто ['RUC_PO-345']
), которые следуют шаблону. Я использовал приведенный выше обычный шаблон, чтобы убедиться, что значение вашего поиска не будет находиться в начале строки поиска, но будет после подчеркивания и сопровождается -
.
Теперь, если у вас есть список продуктов, которые вы хотите найти, рассмотрите ниже:
import re
words = ['MX_QW-765', 'RUC_PO-345', 'RUC_POLO-209']
srch = ['PO', 'QW']
r = re.compile(fr'(?<=_)({"|".join(srch)})(?=-)')
print(list(filter(r.findall, words)))
Или снова используйте match
:
import re
words = ['MX_QW-765', 'RUC_PO-345', 'RUC_POLO-209']
srch = ['PO', 'QW']
r = re.compile(fr'^.*(?<=_)({"|".join(srch)})(?=-).*$')
print(list(filter(r.match, words)))
Оба вернутся: ['MX_QW-765', 'RUC_PO-345']
Обратите внимание, что если у вас не поддерживаются f-строки, вы также можете добавить свою переменную в шаблон.