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

如何在DataFrame中移除品牌名列表匹配项及之前的所有内容

解决方案

问题分析

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

  1. 第一种写法里,正则表达式未正确嵌入品牌列表变量,还存在引号不匹配的语法错误;
  2. 第二种写法仅匹配品牌名本身,没有覆盖前面的数量、单位内容,无法完全删除目标部分。

正确实现方式

我们需要构造正则表达式,匹配**从字符串开头到任意品牌名结束(含品牌名及后续空格)**的所有内容,再通过替换或提取得到纯商品名,两种方式都能实现需求:

方法1:使用str.replace替换目标内容

variations = ['Cushelle', 'Charmin', 'Tesco', 'Sainsburys']
# 构造正则模式:匹配开头到任意品牌名+后续空格的所有内容
pattern = fr'^.*?(?:{"|".join(variations)})\s*'
# 替换为空字符串,得到纯商品名
data['item_name'] = data['item'].str.replace(pattern, '', regex=True)

方法2:使用str.extract直接提取商品名(更直观)

variations = ['Cushelle', 'Charmin', 'Tesco', 'Sainsburys']
# 构造正则模式:提取任意品牌名+空格之后的所有内容
pattern = fr'(?:{"|".join(variations)})\s*(.*)'
# 提取匹配到的分组内容,得到纯商品名
data['item_name'] = data['item'].str.extract(pattern, expand=False)

代码说明

  • fr'^.*?(?:{"|".join(variations)})\s*':
    • ^.*?:非贪婪匹配从字符串开头到目标内容的所有字符;
    • (?:{"|".join(variations)}):用|拼接所有品牌名作为匹配目标(?:表示非捕获分组,不保留品牌名本身);
    • \s*:匹配品牌名之后的任意空格,确保商品名前无多余空格。
  • 若需忽略大小写(比如品牌名存在小写变体),可添加flags=re.IGNORECASE:
    import re
    data['item_name'] = data['item'].str.replace(pattern, '', regex=True, flags=re.IGNORECASE)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:40:43