跳转到主内容
极星编程网:以代码为星,赴技术山海!

Python正则如何匹配时间格式?HH:MM:SS示例

要匹配24小时制的时间格式hh:mm:ss,可使用 正则表达式 ^(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)$。1. 该表达式通过^和$确保完整匹配;2. 使用(?: ... )非捕获组进行分组;3. [01]\d匹配00-19,2[0-3]匹配20-23;4. [0-5]\d分别匹配00-59的分钟和秒。在 python 中可用re.fullmatch()验证,如is_valid_time("23:59:59")返回true,而"24:00:00"或"12:60:30"则返回false。扩展形式可支持hh:mm或带毫秒的hh:mm:ss.sss格式。 时间格式的匹配是正则表达式中一个常见但需要细心处理的任务。如果你想匹配类似
HH:MM:SS
这样的时间格式,比如
12:34:56
,那就要确保小时、分钟和秒数都在合理范围内。 下面是一个能有效匹配这类时间格式的正则表达式写法,并附上解释和示例。 匹配24小时制的时间格式 我们要匹配的是符合 24 小时制的时间,也就是: 立即学习 “ Python免费学习笔记(深入) ”; 小时部分(HH)范围是
00
到
23
分钟部分(MM)和秒部分(SS)都是
00
到
59
对应的正则表达式可以这样写:
^(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)$
拆解说明:
^
和
$
表示从头到尾完全匹配这个模式,避免出现像
123:45:67
这样的误匹配。
(?: ... )
是非捕获组,用于分组但不保存结果。
[01]\d
:表示 00 到 19 的小时。
2[0-3]
:表示 20 到 23 的小时。
[0-5]\d
:表示 00 到 59 的分钟或秒。 你可以把这个正则用在 Python 的
re.match()
或
re.fullmatch()
中来判断是否为合法时间。 Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载 在Python中使用示例 这里简单演示一下如何在代码中使用上面的正则表达式:
import re time_pattern = r'^(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)$' def is_valid_time(time_str): return re.fullmatch(time_pattern, time_str) is not None # 测试几个例子 print(is_valid_time("23:59:59")) # True print(is_valid_time("00:00:00")) # True print(is_valid_time("24:00:00")) # False print(is_valid_time("12:60:30")) # False
几点注意: 使用
re.fullmatch()
能更准确地保证整个字符串都匹配规则。 如果你只是想在一段文本中查找时间,而不是验证整个字符串,那就改用
re.search()
。 常见变体与扩展 有时你可能遇到其他形式的时间,比如带毫秒的
HH:MM:SS.sss
或者只包含小时和分钟的
HH:MM
。这时候可以根据需求做适当调整: 只匹配 HH:MM:
^(?:[01]\d|2[0-3]):[0-5]\d$
匹配带毫秒的完整时间:
^(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)(?:\.\d{1,3})?$
其中
(?:\.\d{1,3})?
表示可选的
.xxx
毫秒部分。 基本上就这些。 正则写起来不算难,但要覆盖所有边界情况(比如 23:59:59 合法,而 24:00:00 不合法)就需要仔细考虑了。

相关文章