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

Python Pandas数据集违禁词匹配问题:精准匹配独立违禁词

解决Pandas中筛选独立违禁词行的问题

这问题我太熟悉了!你当前的困境核心是没搞对正则匹配的边界规则——^和$是用来匹配整个字符串的首尾,而你需要的是匹配独立单词的边界,也就是确保违禁词是作为一个单独的单词出现,而不是长单词的一部分。

正确的解决方案:使用单词边界\b

正则里的\b表示单词边界,它会匹配一个单词的开始或结束位置(简单说就是单词前后不能是字母、数字或下划线)。把每个违禁词用\b包裹起来,就能精准匹配独立出现的违禁词了。

完整代码示例

import pandas as pd

# 你的数据集示例
df = pd.DataFrame({
    'column': [
        "This doctor is a psycho",
        "I had a psychotherapy that worked for me",
        "He called me a stupid idiot",
        "That's a stupidly bad idea"
    ]
})

# 定义违禁词列表
forbidden_words = ["psycho", "fool", "stupid"]

# 构建带单词边界的正则表达式
# 用|连接所有违禁词,每个词前后加\b
pattern = r"\b(" + "|".join(forbidden_words) + r")\b"

# 筛选匹配的行(case=False可选,用来忽略大小写匹配)
df_match = df[df['column'].str.contains(pattern, case=False, regex=True)]

print(df_match)

运行这个代码后,只会返回包含独立违禁词的行:

column
0  This doctor is a psycho
2  He called me a stupid idiot

为什么之前的方法不行?

  • 第一种写法df['column'].str.contains("fool|stupid|psycho"):没有任何边界限制,只要文本里包含这些字符串的子串就会匹配,所以"psychotherapy"里的"psycho"也会被命中。
  • 第二种写法df['column'].str.contains("fool|stupid|^psycho$"):^psycho$表示整个字符串必须完全等于"psycho"才会匹配,而你的文本是更长的句子,自然没有结果。

进阶:处理带特殊字符的违禁词

如果你的违禁词里包含正则特殊字符(比如.、*、(等),记得用re.escape()来转义,避免正则解析出错:

import re

forbidden_words = ["psycho", "fool!", "stupid?"]
pattern = r"\b(" + "|".join(re.escape(word) for word in forbidden_words) + r")\b"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:02:55