You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则验证字符串问题求助:所有测试用例均返回Invalid

Python正则表达式验证字符串问题修复

你的正则表达式存在几个关键问题,导致所有测试用例都返回Invalid,以下是问题分析和修复方案:

问题分析

  1. 开头断言错误:你用了(?<=[4-6])正向后瞻断言,这个断言要求字符串的前一个字符是4-6,但字符串开头没有前置字符,所以这个条件永远无法满足,直接导致所有匹配失败。
  2. 分隔符匹配逻辑错误:-?允许在任意位置添加或省略连字符,不符合“只能按4位一组用单个连字符分隔”的规则,比如会错误匹配61234-567-8912-3456这种非4位分组的格式。
  3. 连续重复数字的断言有漏洞:原断言没有正确处理带连字符的连续重复数字(比如33-33这种四个连续3的情况)。

修复后的代码

import re
pattern = r'^[4-6](?:\d{15}|(?:\d{4}-){3}\d{4})$'
for _ in range(int(input())):
    s = input().strip()
    if re.match(pattern, s) and not re.search(r'(\d)(?:-?\1){3}', s):
        print('Valid')
    else:
        print('Invalid')

正则说明

  1. 开头匹配:^[4-6]确保字符串以4、5、6开头。
  2. 格式匹配:
    • \d{15}:匹配开头后跟着15位数字,组成完整的16位连续数字格式。
    • (?:\d{4}-){3}\d{4}:严格匹配xxxx-xxxx-xxxx-xxxx的分组格式,确保连字符仅出现在4位数字组之间。
  3. 连续重复数字检查:re.search(r'(\d)(?:-?\1){3}', s)检测是否存在4个连续相同的数字(允许中间有单个连字符,比如11-11),存在则判定为无效。

测试用例验证

输入:

6
4123456789123456
5123-4567-8912-3456
61234-567-8912-3456
4123356789123456
5133-3367-8912-3456
5123 - 3567 - 8912 - 3456

输出:

Valid
Valid
Invalid
Valid
Invalid
Invalid

完全符合预期结果。

内容的提问来源于stack exchange,提问作者rushi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 06:53:25