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格式。

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

时间格式的匹配是正则表达式中一个常见但需要细心处理的任务。如果你想匹配类似 HH:MM:SS 这样的时间格式,比如 12:34:56,那就要确保小时、分钟和秒数都在合理范围内。

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

下面是一个能有效匹配这类时间格式的正则表达式写法,并附上解释和示例。

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


匹配24小时制的时间格式

我们要匹配的是符合 24 小时制的时间,也就是:

立即学习Python免费学习笔记(深入)”;

  • 小时部分(HH)范围是 00 到 23
  • 分钟部分(MM)和秒部分(SS)都是 00 到 59

对应的正则表达式可以这样写:

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

^(?:[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中使用示例

这里简单演示一下如何在代码中使用上面的正则表达式:

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 不合法)就需要仔细考虑了。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享