擅长:python、mysql、java
<p>编辑(使用输入和预期输出更新问题后):</p>
<p>您可以简单地使用<code>str.extract()</code>,但需要修复您的正则表达式模式。关键是<code>join</code>将不同的模式转换成一个由or运算符<code>|</code>分隔的字符串,并包含在两个括号之间的捕获组内部:</p>
<pre><code>patterns = ["r\d{1}", "vt", "v\d{2}", "v\d{1}"]
df['new_column'] = df['input_str'].str.extract('(' + '|'.join(patterns) + ')')
df
Out[1]:
col1 col2 col3 col4 input_str new_column
0 a . . . disvt vt
1 b . . . disr5 r5
2 c . . . disvt_r1 vt
3 d . . . disr5/r6 r5
</code></pre>
<p>方法<code>str.contains</code>仅适用于<code>pandas.Series</code>。您应该对普通字符串使用<code>in</code>,如下所示:</p>
<pre><code>if input_str in pattern:
</code></pre>
<p>而不是</p>
<pre><code>if input_str.contains(pattern):
</code></pre>
<p>同样,方法<code>str.extract</code>仅适用于<code>pandas.Series</code>。您可以尝试<code>re.match</code>、<code>re.findall</code>、列表理解或其他适用于普通python字符串的替代方法</p>