如何在Pandas DataFrame的URL列中用正则提取汽车品牌
解决Pandas DataFrame中提取完整汽车品牌的正则问题
原正则的问题分析
你当前使用的正则.+([A-Z])\w+(?=[\/])+存在两个核心问题:
.+是贪婪匹配模式,会优先消耗掉/used/之后的大部分内容,仅让捕获组([A-Z])拿到单个大写字母\w+仅匹配字母、数字和下划线,无法匹配品牌名称中的横杠(-),导致带横杠的品牌无法完整匹配,同时匹配失败的行会被过滤,最终数据行数大幅减少
正确的正则表达式及用法
针对URL结构(/used/品牌/...),可以用以下两种正则方案提取完整品牌:
方案1:利用正向零宽后行断言
直接定位/used/之后、下一个/之前的所有字符:
df['Brand'] = df['Page'].str.extract(r'(?<=/used/)[^/]+', expand=False)
(?<=/used/):确保匹配内容的前导是/used/,但不包含在匹配结果中[^/]+:匹配任意非/的字符,直到遇到下一个/,完美兼容带横杠的品牌名称
方案2:使用捕获组
通过捕获组提取目标内容,适合需要更明确结构匹配的场景:
df['Brand'] = df['Page'].str.extract(r'/used/([^/]+)/', expand=False)
([^/]+):将/used/和下一个/之间的内容作为捕获组,str.extract会自动提取该组的内容
关键注意点
使用str.extract而非其他匹配方法(如str.match),因为str.extract会为所有行返回结果,匹配失败的行填充NaN,不会丢失原有数据行。
内容的提问来源于stack exchange,提问作者Anastasia Sukhorebraya_Beck
相关产品推荐
相关产品推荐

