Python如何使用正则表达式校验YYYY-MM-DD HH:MM:SS格式的日期字符串
基础格式校验实现
你写的正则规则是对的,只需要补充首尾定位符^和$,确保是对整个字符串做匹配,避免出现字符串前后带多余内容也通过校验的问题。Python中可以直接用re模块的fullmatch方法实现校验:
import re def check_date_format(date_str): # ^ 匹配字符串开头,$ 匹配字符串结尾 date_pattern = r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$' # fullmatch要求整个字符串完全匹配正则规则,匹配失败返回None return bool(re.fullmatch(date_pattern, date_str))
测试效果:
# 合法格式 date_string1 = '2018-05-01 00:00:00' print(check_date_format(date_string1)) # 输出 True # 非法格式 date_string2 = '2018-05 00:00:00' print(check_date_format(date_string2)) # 输出 False
如果你需要在校验通过的同时提取年、月、日、时、分、秒的数值,保留正则里的分组即可:
def check_and_extract(date_str): date_pattern = r'^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$' match_res = re.fullmatch(date_pattern, date_str) if not match_res: return False, None # groups()返回所有分组的匹配结果,顺序对应年、月、日、时、分、秒 return True, match_res.groups()
进阶:同时校验日期合法性
上面的正则只能校验格式是否匹配,无法判断日期本身是否合法,比如2023-13-40 25:70:00这种格式符合但实际不存在的日期,正则也会返回True。如果需要同时校验日期有效,可以结合datetime模块实现:
import re from datetime import datetime def check_date_full(date_str): date_pattern = r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$' if not re.fullmatch(date_pattern, date_str): return False try: # 用datetime的strptime方法转成日期对象,格式不合法会抛出ValueError datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S') return True except ValueError: return False
内容的提问来源于stack exchange,提问作者meuhfunk
相关产品推荐
相关产品推荐

