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

Python正则提取所有HHmmss-HHmmss格式时间范围问题求助

解决Python提取所有时间范围字符串的问题

问题原因

你当前的代码有两个核心问题:

  1. re.search() 仅会返回字符串中第一个完整匹配的结果,无法遍历所有符合条件的子串。
  2. 正则表达式中的重复捕获组 (.*(\d{4,10}-\d{4,10}))* 会覆盖之前的捕获结果,最终只能保留最后一个匹配的时间范围。

解决方案

使用 re.findall() 替代 re.search(),同时简化正则表达式,直接匹配目标格式的子串:

import re

text = "random text 0700-1300 random text 1830-2230 random 1231 text"
# 匹配4-6位数字连字符连接的格式(兼容HHmm-HHmm和HHmmss-HHmmss)
regex = r'\d{4,6}-\d{4,6}'
time_ranges = re.findall(regex, text)
print(time_ranges)  # 输出: ['0700-1300', '1830-2230']

进阶:严格验证时间合法性

如果需要确保提取的是合法的时间范围(比如小时00-23,分钟/秒00-59),可以使用更精准的正则:

# 同时匹配HHmm-HHmm和HHmmss-HHmmss格式的合法时间
strict_regex = r'(?:[01]\d|2[0-3])[0-5]\d(?:[0-5]\d)?-(?:[01]\d|2[0-3])[0-5]\d(?:[0-5]\d)?'
valid_time_ranges = re.findall(strict_regex, text)
print(valid_time_ranges)  # 输出: ['0700-1300', '1830-2230']

关键说明

  • re.findall() 会遍历整个字符串,返回所有符合正则的子串列表,无匹配项时返回空列表,完全满足你提取0个或任意数量时间范围的需求。
  • 避免在正则中使用冗余的 .* 匹配,直接定位目标格式的子串即可,减少匹配逻辑的复杂度。

内容的提问来源于stack exchange,提问作者4mla1fn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:50:25