【发布时间】:2018-04-10 19:46:35
【问题描述】:
这是一个我试图解决的hackerrank问题。 问题陈述是:
你和弗雷德里克是好朋友。昨天,Fredrick 收到了 ABCD 银行的信用卡。他想验证他的信用卡号码是否有效。你碰巧擅长正则表达式,所以他正在寻求你的帮助! ABCD 银行的有效信用卡具有以下特征:
- 它必须以 或 开头。
- 它必须包含精确的数字。
- 它只能由数字 (-) 组成。
- 它可能有一组数字,用一个连字符“-”分隔。
- 不得使用任何其他分隔符,如“”、“_”等。
- 它不能有或多个连续的重复数字。
输入格式 输入的第一行包含一个整数。 下一行包含信用卡号。 约束
输出格式 如果信用卡号有效,请打印“有效”。否则,打印“无效”。不要打印引号。
我的解决方案是:
import re
for _ in range(int(input())): cc_inp=input()
reg=re.findall(r'(^[456]{1}\d{3})(?! _)(-?)(\d{4})(?! _)(-?)(\d{4})(?! _)(-?)(\d{4})$',cc_inp)
if reg:
reg1=re.sub(r'\D', "",cc_inp)
for i in range(13):
if(reg1[i]==reg1[i+1]):
if(reg1[i+1]==reg1[i+2]):
if(reg1[i+2]==reg1[i+3]):
print("Invalid")
exit()
else:
res=True
if(res==True):
print("Valid")
else:
print("Invalid")
对于测试用例:
6
4123456789123456
5123-4567-8912-3456
61234-567-8912-3456
4123356789123456
5133-3367-8912-3456
5123 - 3567 - 8912 - 3456
它只为前 5 个测试用例提供输出: 有效
有效
无效
有效
无效
第 6 种情况没有被执行,当我尝试单独执行第 6 种情况时,它会被执行并显示所需的输出。
编辑: 我是说这个问题的链接,这只是在线练习问题,不是为了任何比赛。
【问题讨论】:
-
这是一场跑步比赛吗?
-
您的规则不清楚,我认为您缺少信息。
-
请展示您如何将测试用例提供给您的代码。
-
@WillemVanOnsem 不,这不是比赛,只是练习题。
-
@ctwheels 我已经提到了问题的链接,希望它能提供所需的信息。
标签: python regex python-3.x regex-negation regex-group