如何修正正则表达式实现特定时间格式转换与时段替换?
实现特定时间格式的替换逻辑
需求说明
需要处理字符串中的特定时间格式:
- 匹配
:XX:00 am格式的子串,替换为00:XX am - 匹配
:XX:00 pm格式的子串,替换为00:XX am(同时将pm转为am) - 不匹配上述模式的子串(如
15:00 pm)保持不变
解决方案
使用Python的re.sub()方法,配合精准匹配目标格式的正则表达式即可实现。
正则表达式说明
正确的正则表达式为:r":(\d{2}):00\s+(am|pm)"
:匹配目标子串开头的冒号(\d{2})捕获两位数字(即XX部分),作为后续替换的引用分组:00匹配固定的:00时间部分\s+匹配时间与am/pm之间的一个或多个空格(am|pm)捕获时段标识(am/pm),仅用于匹配,替换时统一转为am
替换逻辑
因为不管原时段是am还是pm,最终都要输出am,所以替换字符串直接写为r"00:\1 am",其中\1引用捕获到的两位数字XX。
完整代码示例
import re input_text = "a :01:00 pm :30:00 am ; :11:00 am, :00:00 am,: 15:00 pm : :00:00 am hay 1" # 执行替换 output_text = re.sub(r":(\d{2}):00\s+(am|pm)", r"00:\1 am", input_text) print(output_text) # 输出结果: # a 00:01 am 00:30 am ; 00:11 am, 00:00 am,: 15:00 pm : 00:00 am hay 1
适配说明
该正则仅匹配严格符合:XX:00 am/pm格式的子串,其他任何格式的内容都会保持原样,完全适配未知输入的场景(比如无需要替换的内容时,输出与输入一致)。
内容的提问来源于stack exchange,提问作者Matt095
相关产品推荐
相关产品推荐

