Pandas正则匹配问题:如何删除含特殊字符或指定完整单词的行
问题分析与解决
你的代码问题出在正则表达式的逻辑和语法错误,导致无法匹配到完整单词'word'的行,具体问题点如下:
- 正则表达式语法错误:你写的
r'[@#%+*=](word))'里,括号使用错误且多了一个右括号,同时没有用|表示“或”的关系。这个表达式实际是在匹配「特殊字符 + (word)」这样的组合,完全不会匹配单独的'word'字符串。 - 缺少单词边界:要匹配完整的单词'word',需要用
\b标记单词边界,确保只匹配独立的完整单词,避免误匹配包含'word'的其他字符串(比如'wording')。
修正后的代码
df = df[~df['col'].str.contains(r'[@#%+*=]|\bword\b', regex=True)]
代码解释
[@#%+*=]:匹配任意一个指定的特殊字符;|:正则中的“或”操作符,分隔两个匹配规则;\bword\b:\b是单词边界,确保只匹配独立的完整单词'word';~:取反操作,保留不满足匹配条件的行;- 注意
df[col]要改成df['col'],否则会把col当作变量而非列名。
执行这段代码后,原数据中的'ahoi*'(含特殊字符)和'word'(完整单词)都会被过滤,最终只保留'be'所在的行,符合你的预期。
内容的提问来源于stack exchange,提问作者Fred
相关产品推荐
相关产品推荐

