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