Python中如何用正则将hh:mm:ss时间格式转换为hh:mm格式
正确实现方法
你的需求可以通过正则分组捕获实现,只匹配hh:mm:ss格式的字符串,捕获前半段hh:mm直接替换即可,原有hh:mm格式的内容不会被正则匹配,会原样保留。
1. 正则写法说明
使用正则:r'^(\d{2}:\d{2}):\d{2}$'
^、$限定匹配完整字符串,避免误匹配- 括号
()是分组,第一个分组捕获hh:mm部分 - 末尾的
:\d{2}匹配要去掉的秒字段
替换的时候用r'\1',代表直接返回第一个分组的内容即可。
2. Pandas 中实现代码
更推荐直接用pandas内置的字符串替换方法,不需要写列表推导,性能更好:
import pandas as pd import re # 正则替换,只修改hh:mm:ss格式的内容 df['column_name'] = df['column_name'].str.replace(r'^(\d{2}:\d{2}):\d{2}$', r'\1', regex=True)
3. 效果验证
测试输入的样例内容处理后结果如下:
| 原内容 | 处理后内容 |
|---|---|
| 00:00:00 | 00:00 |
| 01:00:00 | 01:00 |
| 05:00 | 05:00 |
| 02:00:00 | 02:00 |
| 06:00 | 06:00 |
你的代码错误原因
- 第一次尝试的错误:
re.sub的第二个参数是普通字符串,你写的正则表达式会被当做普通文本直接替换,所以所有匹配到的内容都变成了正则字符串本身 - 第二次尝试的错误:
re.sub的第二个参数不能直接传入切片语法,语法不合法,会直接报错。
内容的提问来源于stack exchange,提问作者user13099897
相关产品推荐
相关产品推荐

