擅长:python、mysql、java
<p>一种选择是只使用regex<code>|</code>字符来尝试匹配序列<code>s</code>(仍然使用<code>str.contains</code>)中单词中的每个子字符串</p>
<p>您可以通过将<code>searchfor</code>中的单词与<code>|</code>连接来构造正则表达式:</p>
<pre><code>>>> searchfor = ['og', 'at']
>>> s[s.str.contains('|'.join(searchfor))]
0 cat
1 hat
2 dog
3 fog
dtype: object
</code></pre>
<p>正如@AndyHayden在下面的评论中所指出的,如果子字符串有一些特殊字符,例如<code>$</code>和<code>^</code>,请注意,这些字符需要逐字匹配。这些字符在正则表达式的上下文中具有特定的含义,并将影响匹配</p>
<p>通过使用<code>re.escape</code>转义非字母数字字符,可以使子字符串列表更安全:</p>
<pre><code>>>> import re
>>> matches = ['$money', 'x^y']
>>> safe_matches = [re.escape(m) for m in matches]
>>> safe_matches
['\\$money', 'x\\^y']
</code></pre>
<p>当与<code>str.contains</code>一起使用时,此新列表中的字符串将与每个字符进行字面匹配</p>