You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用正则提取12小时制时间并转换为24小时制的技术求助

解决12小时制转24小时制并替换原字符串的问题

我来帮你搞定这个时间转换的问题!先看看你现有代码的问题:你的正则表达式开头加了\s,要求时间前面必须有空格,但原字符串里10:00 am前面是逗号,没有空格,所以只匹配到了第二个时间7:00 pm,这就是为什么你没得到预期的两个时间。

下面是完整的解决方案,分步骤来:

步骤1:修正正则表达式,匹配所有12小时制时间

我们需要匹配所有形如HH:MM am/pm或者H:MM am/pm的时间(比如你的例子里有7:00 pm是单个小时数),所以正则可以写成:

r'(\d{1,2}:\d{2}\s?(?:am|pm))'

这个正则能匹配1或2位小时数,加上分钟,再加上可选空格和am/pm(不区分大小写)。

步骤2:编写时间转换函数

用Python的datetime模块来解析12小时制时间,再格式化为24小时制的字符串:

from datetime import datetime

def convert_to_24h(time_str):
    # 解析12小时制时间,处理带空格或不带空格的情况(比如10:00am或10:00 am)
    time_obj = datetime.strptime(time_str.strip(), '%I:%M %p')
    # 格式化为24小时制的HH:MM
    return time_obj.strftime('%H:%M')

步骤3:替换原字符串中的时间

用re.sub()遍历所有匹配到的时间,逐个替换成24小时制:

完整代码

import re
from datetime import datetime

def convert_to_24h(time_str):
    time_obj = datetime.strptime(time_str.strip(), '%I:%M %p')
    return time_obj.strftime('%H:%M')

txt = 'Mon - Fri:,10:00 am - 7:00 pm'
# 替换所有匹配的12小时制时间
result = re.sub(r'(\d{1,2}:\d{2}\s?(?:am|pm))', lambda m: convert_to_24h(m.group()), txt, flags=re.IGNORECASE)
print(result)

运行结果

Mon - Fri:,10:00 - 19:00

这样就完美得到了你想要的最终字符串啦!

内容的提问来源于stack exchange,提问作者rex sphinx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:12:36