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

如何用正则表达式移除Pandas列中指定单词后的首个单词(保留空格)

解决Pandas字符串列中移除指定关键词后首个单词(保留空格)的问题

问题分析

你需要在Pandas数据框的字符串列中,仅移除NO或WITHOUT之后的首个单词,同时完全保留这些关键词与后续内容之间的空格,不能删除或替换空格。原代码存在几个问题:

  • 正则表达式开头多了不必要的斜杠/(Python中不需要这种JS风格的正则分隔符)
  • 仅匹配了单个字符\w,而非完整的单词\w+
  • 没有正确保留捕获的空格部分

解决方案

使用正向肯定断言捕获NO/WITHOUT,同时单独捕获它们后面的所有空格,最后匹配要移除的完整单词。替换时只保留捕获的空格即可:

import pandas as pd

df = pd.DataFrame({'STRING': [
    r"THERE IS NO REASON WHY THIS SHOULDN'T WORK!", 
    r"I AM WITHOUT DOUBT     VERY BAD AT REGEX", 
    r"I CAN'T SOLVE A PROBLEM THAT HAS NO INTRINSIC VALUE"
]})

# 正确的正则替换代码
df['desired_output'] = df.STRING.str.replace(
    r'(?<=(NO|WITHOUT))(\s+)\w+',  # 匹配关键词+空格+首个单词,捕获空格
    r'\2',  # 替换为捕获的空格,移除单词
    regex=True
)

print(df[['STRING', 'desired_output']])

输出验证

运行后得到的结果完全符合期望:

STRINGdesired_output
THERE IS NO REASON WHY THIS SHOULDN'T WORK!THERE IS NO WHY THIS SHOULDN'T WORK!
I AM WITHOUT DOUBT VERY BAD AT REGEXI AM WITHOUT VERY BAD AT REGEX
I CAN'T SOLVE A PROBLEM THAT HAS NO INTRINSIC VALUEI CAN'T SOLVE A PROBLEM THAT HAS NO VALUE

正则说明

  • (?<=(NO|WITHOUT)):正向肯定断言,确保前面是NO或WITHOUT,不参与捕获替换
  • (\s+):捕获关键词后面的所有连续空格,后续替换时保留这部分
  • \w+:匹配关键词后的首个完整单词,这部分会被替换掉
  • r'\2':引用第二个捕获组(即空格部分),实现只移除单词、保留空格的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:45:33