如何调整正则表达式,确保拦截带00Z的YYYY-MM-DDTHH:MM:SS格式?
解决方案:严格匹配完整字符串
你的问题核心是原正则仅匹配了目标格式的开头部分,即便字符串后附带:00Z这类多余内容,re.match也会因开头匹配成功而不报错。要彻底拦截这类带后缀的非法格式,关键是让正则严格匹配整个字符串,只需给原正则加上字符串起始和结束的锚点即可。
修改后的正则与代码示例
start_time_valid = "1970-01-08T00:38:45" start_time_invalid = "1970-01-08T00:38:45:00Z" # 加上^(字符串起始)和$(字符串结束)锚点 regular_exp = '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$' import re # 测试合法格式 if not re.match(regular_exp, start_time_valid): print('error') # 不会触发 else: print('valid') # 输出 valid # 测试带00Z的非法格式 if not re.match(regular_exp, start_time_invalid): print('error') # 输出 error,符合预期 else: print('valid')
锚点作用说明
^:强制匹配从字符串的第一个字符开始,避免前缀多余内容(虽然你的场景里前缀不会有问题,但这是完整匹配的必要部分)$:强制匹配到字符串的最后一个字符结束,确保后面没有任何额外的字符(比如:00Z)
这样修改后,只有完全符合YYYY-MM-DDTHH:MM:SS格式的字符串才能通过校验,带后缀的非法格式会被精准拦截。
内容的提问来源于stack exchange,提问作者Harry Boy
相关产品推荐
相关产品推荐

