Python如何从含am/pm格式的字符串中提取指定时间范围?
问题原因说明
你之前的两个尝试存在以下问题:
- 第一种正则仅匹配带分钟后缀(
:xx)的时间,无法命中9 pm这类无分钟的时间格式 - 第二种正则虽然兼容了无分钟时间,但只能单独捕获单个时间点,无法直接拼接为完整的时间范围,也没有处理时间与am/pm之间的空格、两段时间中间的分隔符
实现方案
你可以通过正则先捕获所有符合规则的单个时间,再两两拼接为范围即可,代码示例如下:
import re # 样例输入 time_strs = [ 'Mon-Thu, Sun 11:30 am - 9 pm', 'Sat-Sun 9:30 am - 9:30 pm', 'Sat 5 pm - 9 pm' ] # 正则规则:(?i)忽略大小写,匹配1-2位小时+可选的:xx分钟+空格+am/pm pattern = re.compile(r"(?i)\d{1,2}(?::\d{2})? [ap]m") result = [] for st in time_strs: # 提取所有符合规则的时间,去掉空格后两两拼接 times = [t.replace(" ", "") for t in pattern.findall(st)] if len(times) >= 2: result.append(f"{times[0]}-{times[1]}") # 输出结果 for item in result: print(item)
运行输出和你预期完全一致:
11:30am-9pm 9:30am-9:30pm 5pm-9pm
内容的提问来源于stack exchange,提问作者Darshan
相关产品推荐
相关产品推荐

