如何使用re.sub()去除字符串中不需要的内容?
如何用Python的re.sub()去除字符串中不需要的内容
没问题,我来给你讲清楚怎么用Python的re.sub()清理字符串里不需要的内容,结合你给的示例数据一步步来~
先搞懂re.sub()的基础用法
re.sub()是Python正则表达式模块里的核心替换函数,要是把替换内容设为空字符串"",就相当于直接删除匹配到的内容。它的基本语法很简单:
re.sub(pattern, replacement, original_string)
pattern:正则表达式,用来描述你要匹配/删除的内容格式replacement:替换后的内容(要删除就填"")original_string:你要处理的原字符串
针对你的示例数据实战
先把你给的示例里的关键字符串拎出来,比如那个title字段:
Basket US - NBA - Matchs - Sacramento Kings // Golden State Warriors - 1 avril 2018 - 4h10
下面针对几种常见需求给出处理方案:
需求1:只保留球队名称,删除前缀分类和后缀日期时间
如果你只想留下两支球队的名字,我们可以写正则匹配开头的前缀和结尾的日期部分,然后替换成空:
import re title = "Basket US - NBA - Matchs - Sacramento Kings // Golden State Warriors - 1 avril 2018 - 4h10" # 匹配开头的前缀 ^Basket US - NBA - Matchs - ,或者结尾的日期部分 - \d+ .*$ clean_title = re.sub(r'^Basket US - NBA - Matchs - | - \d+ .*$', '', title) print(clean_title) # 输出: Sacramento Kings // Golden State Warriors
这里正则里的^表示字符串开头,$表示结尾,|表示“或”的逻辑,.*表示匹配任意字符(直到字符串结束)。
需求2:把分隔符//换成更友好的vs
如果还要优化球队名称的分隔方式,可以接着替换:
clean_title_vs = re.sub(r'//', 'vs', clean_title) print(clean_title_vs) # 输出: Sacramento Kings vs Golden State Warriors
需求3:删除所有特殊符号(只保留字母、数字和空格)
如果想去掉所有非文字数字的符号,用[^a-zA-Z0-9\s]匹配所有不在这个范围内的字符,然后替换为空:
clean_all_special = re.sub(r'[^a-zA-Z0-9\s]', '', title) print(clean_all_special) # 输出: Basket US NBA Matchs Sacramento Kings Golden State Warriors 1 avril 2018 4h10
处理字典里的其他字段
比如你示例里的data-event_id字段是sacramento_kings__golden_state_warriors,想把双下划线换成空格:
var1 = { 'data-event_id': 'sacramento_kings__golden_state_warriors', # 其他字段省略... } clean_event_id = re.sub(r'__', ' ', var1['data-event_id']) print(clean_event_id) # 输出: sacramento_kings golden_state_warriors
几个实用小技巧
- 如果你不确定正则写得对不对,可以先单独打印匹配到的内容,确认后再替换成空;
- 正则里的特殊字符(比如
.、-、*)如果要匹配本身,需要加转义符\,比如匹配.要写\.; - 复杂的匹配可以用括号分组,比如
(pattern1)(pattern2),替换时可以用\1引用第一个分组的内容。
内容的提问来源于stack exchange,提问作者Elsha
相关产品推荐
相关产品推荐

