Как предлагается в комментариях и других ответах, оператор in может использоваться для проверки того, является ли строка подстрокой другой строки. Для данных примера в вопросе in
- это самый простой и быстрый способ получить желаемый результат.
Если требуется соответствие '/ item / page / cat-dog', но не '/ item / page / catapult' - это соответствует только слову 'cat', а не только последовательности cat , тогда для сопоставления можно использовать регулярное выражение.
Шаблон для соответствия одному слову: '\bfoo\b'
, где '\b'
обозначает границу слова.
Оператор чередования '|'
используется для сопоставления с тем или иным шаблоном, например, 'foo|bar'
соответствует 'foo' или 'bar'.
Построить шаблон, соответствующий словам в keywords
; вызовите re.escape для каждого ключевого слова, если они содержат символы, которые механизм регулярных выражений может интерпретировать как метасимволы.
>>> pattern = r'|'.join(r'\b{}\b'.format(re.escape(keyword)) for keyword in keywords)
>>> pattern
'\\bcat\\b|\\bplanet\\b'
Скомпилировать шаблон в объект регулярного выражения .
>>> rx = re.compile(pattern)
Найдите совпадения: используя фильтр элегантно:
>>> matches = list(filter(rx.search, valid))
>>> matches
['/item/page/cat-dog', '/item/page/animal-planet']
Но обычно используется понимание списка :
>>> matches = [word for word in valid if rx.search(word)]
>>> matches
['/item/page/cat-dog', '/item/page/animal-planet']