如何用Python正则表达式验证指定结构的字符串格式?
解决方案
原正则问题分析
你写的正则有几个明显问题:
- 左括号
[是正则元字符,必须转义成\[才能匹配字面量的[ - 没有匹配字符串结尾的
] [A-Z,]+会允许连续逗号、逗号开头/结尾的无效格式,不符合规则3的要求re.match仅匹配字符串开头,无法确保整个字符串完全符合规则,建议用re.fullmatch
正确实现代码
import re def validate_target_string(text): # 符合所有规则的正则表达式 pattern = r'^[0-9A-Z]{4}\[[A-Z](?:,[A-Z])*\]$' # 返回True/False表示验证结果 return bool(re.fullmatch(pattern, text))
正则规则拆解
^[0-9A-Z]{4}:匹配开头4个数字或大写字母(满足规则1)\[:匹配字面量左括号[(满足规则2)[A-Z](?:,[A-Z])*:匹配单个大写字母,后续可跟任意数量的,大写字母组合,确保逗号仅在字母之间,避免连续逗号、首尾逗号的无效情况(满足规则3)]$:匹配结尾的右括号](满足规则4)
测试验证
# 合法字符串测试 print(validate_target_string("ABCD[A,B]")) # True print(validate_target_string("BD1F[E,G,A,R]")) # True print(validate_target_string("S4P5[C]")) # True # 非法字符串测试 print(validate_target_string("ABCD[A,B,")) # False(缺少结尾]) print(validate_target_string("ABcD[A,B]")) # False(包含小写字母) print(validate_target_string("ABCD[A,,B]")) # False(连续逗号) print(validate_target_string("ABCD[,A,B]")) # False(逗号开头)
内容的提问来源于stack exchange,提问作者Murf
相关产品推荐
相关产品推荐

