如何用Python正则匹配Excel单元格末尾模式拆分多列数据
解决方案
问题根因
你原有正则失效的核心原因是:正则里的$锚定的是原始未拆分字段的末尾,而原始字段末尾是 x 数字的结构,不存在大写字母结尾的情况,自然无法匹配到分类。你已经把原始字段拆分为「标题+分类」和「Rating」两部分,应该在拆分后的「标题+分类」字段上做末尾匹配。
实现步骤
- 首先修正拆分Rating的代码,拆分后得到临时存储「标题+分类」的字段:
data[['tmp_title_category', 'Rating']] = data['Movie Titles/Category/Rating'].str.split(' x ', expand=True)
- 从临时字段末尾提取Category,正则通过
$锚定匹配末尾,只会命中最后一个符合规则的大写组合,不会匹配中间的EXPL:
data['Category'] = data['tmp_title_category'].str.extract(r'\s([A-Z]{1,2}-\d{1,2}|[A-Z]{2,})$', expand=True)
- 剔除临时字段末尾的分类内容,得到最终的标题:
data['Title'] = data['tmp_title_category'].str.replace(r'\s([A-Z]{1,2}-\d{1,2}|[A-Z]{2,})$', '', regex=True)
- 清理不需要的临时字段和原始字段:
data = data.drop(columns=['tmp_title_category', 'Movie Titles/Category/Rating'])
正则说明
\s匹配分类前的前置空格,避免匹配到标题里的大写内容- 捕获组内的两个分支分别匹配两类分类规则:
[A-Z]{1,2}-\d{1,2}对应A-13、DC-23这类带横杠的分类,[A-Z]{2,}对应IMDB、FEAR这类纯大写字母分类 - 末尾的
$锚定匹配位置为临时字段的末尾,确保只会匹配最后一个符合规则的分类,不会命中标题中间的大写组合
内容的提问来源于stack exchange,提问作者bluepanther9999
相关产品推荐
相关产品推荐

