要匹配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中使用示例
這里簡單演示一下如何在代碼中使用上面的正則表達式:
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 不合法)就需要仔細考慮了。