Ответ 1
Один из вариантов состоит в том, чтобы использовать символ regex |
, чтобы попытаться сопоставить каждую из подстрок в словах в вашей серии s
(все еще используя str.contains
).
Вы можете построить регулярное выражение, соединяя слова в searchfor
с |
:
>>> searchfor = ['og', 'at']
>>> s[s.str.contains('|'.join(searchfor))]
0 cat
1 hat
2 dog
3 fog
dtype: object
Как отметил @AndyHayden в комментариях ниже, будьте осторожны, если ваши подстроки имеют специальные символы, такие как $
и ^
, которые вы хотите сопоставить буквально. Эти символы имеют определенные значения в контексте регулярных выражений и будут влиять на соответствие.
Вы можете сделать свой список подстрок более безопасным, экранируя не буквенно-цифровые символы с помощью re.escape
:
>>> import re
>>> matches = ['$money', 'x^y']
>>> safe_matches = [re.escape(m) for m in matches]
>>> safe_matches
['\\$money', 'x\\^y']
Строки с в этом новом списке будут соответствовать каждому символу буквально при использовании с str.contains
.