Python正则校验逗号空格分隔数字格式问题求助
修复数字格式校验函数的方案
你的原代码存在两个核心问题:
- 只用
re.findall()会匹配字符串中的部分符合片段,哪怕中间混入其他文本也会返回匹配结果,比如0, 13, 24asd, 27里的0,13,24会被误判为有效; - 正则没有限定逗号后的单个空格规则,也没有锚定整个字符串的首尾,导致无空格、多空格的情况也会被通过。
下面是修复后的完整代码:
import re def format_placement(string): # 正则规则:整个字符串必须是 数字开头,后面跟着0次或多次「逗号+单个空格+数字」 pattern = re.compile(r'^\d+(?:, \d+)*$') # 使用fullmatch判断整个字符串是否完全符合格式 return 1 if pattern.fullmatch(string) else 0
正则规则详解
^:匹配字符串的开头,确保没有前置的无效字符\d+:匹配至少一个纯数字(保证每个部分都是合法数字)(?:, \d+)*:非捕获组,匹配「逗号+单个空格+数字」的组合,*表示这个组合可以出现0次或多次(支持单个数字的情况,比如"5"也会返回1;如果要求必须至少两个数字,把*改成+即可)$:匹配字符串的结尾,确保没有后置的无效字符
测试用例验证
- 有效格式:
format_placement("0, 13, 24, 27")→ 返回1 - 无效格式(无空格):
format_placement("0,13,24")→ 返回0 - 无效格式(多空格):
format_placement("0, 13, 24")→ 返回0 - 无效格式(混入文本):
format_placement("0, 13asd, 27")→ 返回0 - 无效格式(开头非数字):
format_placement("abc, 123")→ 返回0
内容的提问来源于stack exchange,提问作者Frode
相关产品推荐
相关产品推荐

