如何实现符合xxxx-yyyy-zzzz格式的字符串正则校验?
修正字符串格式校验的正则表达式问题
你的正则表达式完全不符合需求,导致误判,问题出在这几点:
- 原正则里的
([A-Z][0-9])只能匹配一个大写字母+一个数字,根本没包含你允许的小写字母、下划线和点 - 每个块被限制成仅两个字符,而你的目标字符串块长度明显更长
- 末尾的
+加错了位置,会导致最后一个分组重复多次,逻辑混乱
修正后的正则表达式应该是:
ab = re.compile(r"^[a-zA-Z_.]+-[a-zA-Z_.]+-[a-zA-Z_.]+$")
正则解释:
[a-zA-Z_.]:精准匹配你允许的所有字符(大小写字母、下划线、点)+:表示每个块至少包含1个有效字符(避免出现空块,比如--abc这种无效格式)^和$:限定整个字符串的首尾,确保整个字符串完全符合格式,不会出现部分匹配的情况
修正后的完整代码:
import sys import re file_name: str = "actors-zero-This_Is_Fine.exe.yml" ab = re.compile(r"^[a-zA-Z_.]+-[a-zA-Z_.]+-[a-zA-Z_.]+$") if ab.match(file_name): print(f"{file_name} 格式正确") else: print(f"WARNING wrong syntax in {file_name}") sys.exit()
运行这段代码后,目标字符串会被正确识别为格式合法,不会再输出错误警告。
内容的提问来源于stack exchange,提问作者Europa
相关产品推荐
相关产品推荐

