使用正则提取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
相关产品推荐
相关产品推荐

