pandas使用str.contains正则筛选脆鸡肉三明治数据匹配错误如何修正?
问题根因
你当前使用的正则仅通过三个正向先行断言要求Item字段同时存在crispy、chicken、sandwich三个关键词,没有限制三个词的关联关系,也没有排除无关关键词。如果出现类似「grilled chicken sandwich with crispy fries」这类同时包含三个关键词但crispy修饰其他配菜的条目,就会被误匹配到。
可行修改方案
方案1:匹配固定语序短语(适配绝大多数规范命名的菜品场景)
直接匹配三个词连续出现的结构,同时开启大小写不敏感适配不同书写格式:
data_sandwich_crispy = data[data['Item'].str.contains(r'crispy\s+chicken\s+sandwich', regex=True, case=False)]
\s+用于适配词之间可能存在的多个空格、制表符等空白字符,case=False可匹配大写开头、全大写等各种大小写组合的写法。
方案2:保留模糊匹配逻辑,新增排除规则
如果你的数据集里存在三个词顺序不固定的情况(比如chicken sandwich (crispy)这类写法),可以在原有正则基础上新增负向先行断言,直接排除带grilled的条目:
data_sandwich_crispy = data[data['Item'].str.contains(r'^(?=.*crispy)(?=.*chicken)(?=.*sandwich)(?!.*grilled)', regex=True, case=False)]
方案3:非正则写法(可读性更高,不易出错)
如果对正则语法不熟悉,直接用字符串包含判断实现逻辑更清晰:
item_lower = data['Item'].str.lower() data_sandwich_crispy = data[ item_lower.str.contains('crispy') & item_lower.str.contains('chicken') & item_lower.str.contains('sandwich') & ~item_lower.str.contains('grilled') ]
内容的提问来源于stack exchange,提问作者AstroGogh
相关产品推荐
相关产品推荐

