<p>您可以直接使用<code>Series.str.contains</code>创建一个掩码,并在以下操作之前禁用用户警告,之后启用用户警告:</p>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
import warnings
data = {'Random' : ['helloooo', 'hahaha', 'kebab', 'shsh', 'title', 'miss', 'were', 'laptop', 'welcome', 'pencil']}
df = pd.DataFrame(data)
warnings.filterwarnings("ignore", 'This pattern has match groups') # Disable the warning
df['Random'] = df['Random'][~df['Random'].str.contains(r"([a-z]+)[a-z]?\1")]
warnings.filterwarnings("always", 'This pattern has match groups') # Enable the warning
</code></pre>
<p>输出:</p>
<pre class="lang-py prettyprint-override"><code>>>> df['Random'][~df['Random'].str.contains(r"([a-z]+)[a-z]?\1")]
# =>
7 laptop
8 welcome
9 pencil
Name: Random, dtype: object
</code></pre>
<p>您的正则表达式包含一个问题:量词被放在组之外,并且<code>\1</code>正在寻找错误的重复字符串。而且,<code>\b</code>字边界是超边界。<code>([a-z]+)[a-z]?\1</code>模式匹配一个或多个字母,然后匹配任意一个可选字母,以及紧跟其后的相同子字符串</p>
<p>见<a href="https://regex101.com/r/XKfcZu/2" rel="nofollow noreferrer"><strong>regex demo</strong></a></p>
<p>我们可以安全地禁用用户警告,因为我们在这里故意使用捕获组,因为我们需要在这个正则表达式模式中使用反向引用。该警告需要重新启用,以避免在代码的其他部分中使用不必要的捕获组</p>