我编写了一个代码来验证汽车的车牌,要达到这个目的有一些条件:
第一个字母不应该是0
AAA12是可以的,但是AA2AAA不是。)
F 212之间。
def is_valid(s):
s = s.lower()
if len(s) >= 2 and len(s) <= 6 and s[0] != 0 and s[0:2].isalpha():
if s.isalpha():
return True
elif s.isalnum():
for sq in s.split():
for w in sq:
if w.isdigit():
x = sq.index(w)
try:
if s[w:].isalpha():
return False
else:
return True
except:
return True因此,我的代码正在以正确的方式执行大多数这些条件,但是当我输入例如HL23P2时,我希望得到False,但它返回True。
它为什么返回False?因为我不能只有字母之间的数字,所以当它类似于HEL23时是允许的。
但是我怎么能检测字母之间的数字呢?
发布于 2022-08-20 19:30:25
我认为,这个没有正则表达式的解决方案是可以的:
def is_valid(s):
meetNumber = False
if len(s) >= 2 and len(s) <= 6 and s[0:2].isalpha():
for i in range(2, len(s)):
if s[i].isnumeric():
meetNumber = True
elif meetNumber == True:
return False
return True
else:
return False
print(is_valid(input()))发布于 2022-08-20 16:31:29
试一试如下:
import re
def is_valid(s):
return bool(re.search(r'^(?=.{2,6}$)[A-Z]{2,}\d*$', s))
print([is_valid(el) for el in ['AAA12', 'AA2AAA', 'HL23P2', 'HEL23']])指纹:
[True, False, False, True]所使用的正则表达式意味着:
^ -启动string;(?=.{2,6}$) -正向查找以匹配2-6个字符,直到结束字符串锚点(满足您对2-6个字符total);[A-Z]{2,} - 2+大写字母的要求)(请满足至少以2 alphachars);\d* - 0+数字开头的要求(允许您的要求在字符之间没有数字,但只能在end);$ - end-string锚点上使用。)
发布于 2022-08-20 19:31:28
以下是正确的答案:
def is_valid(s):
if 2 <= len(s) <= 6 and s[0:2].isalpha() and s.isalnum():
for item in s:
if item.isdigit():
pos = s.index(item)
if s[pos:].isdigit() and int(item) != 0:
return True
else:
return False
return Truehttps://stackoverflow.com/questions/73428241
复制相似问题