You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用正则表达式删除DataFrame中符合特定模式的单词

问题原因

你当前的代码存在两个核心问题:

  1. 正则表达式仅覆盖了「连续重复单个字母」的场景,且规则书写错误,没有匹配另外两类需要排除的模式
  2. 筛选逻辑冗余,不需要通过agg+any的方式跨行判断,直接对目标字符串列做正则匹配即可

正则规则修正

我们把三类需要排除的模式合并为一个正则表达式:

  • 连续重复单个字母:([a-z])\1+ 捕获单个字母后,匹配该字母连续重复1次及以上的场景
  • 连续重复字母对:([a-z]{2})\1+ 捕获两个字母的组合后,匹配该组合连续重复1次及以上的场景
  • ABA结构:([a-z])[a-z]\1 匹配首尾相同、间隔1个任意字母的三元组结构
    三类规则用|拼接,且不需要捕获分组的返回结果,所以统一改为非捕获组避免触发分组警告,最终正则为:
    r'(?:([a-z])\1+)|(?:([a-z]{2})\1+)|(?:([a-z])[a-z]\1)'

修正后完整代码

import pandas as pd

data = {'Random' : ['helloooo', 'hahaha', 'kebab', 'shsh', 'title', 'miss', 'were', 'laptop', 'welcome', 'pencil']}
df = pd.DataFrame(data)

# 直接对目标列做匹配,取反得到符合要求的行
pattern = r'(?:([a-z])\1+)|(?:([a-z]{2})\1+)|(?:([a-z])[a-z]\1)'
df = df[~df['Random'].str.contains(pattern, regex=True, na=False)].reset_index(drop=True)

print(df)

输出结果

Random
0   laptop
1  welcome
2   pencil

完全符合预期,且不会再触发分组警告。

内容的提问来源于stack exchange,提问作者user01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:27:03