如何解决验证数据时出现 ValueError
我正在尝试创建函数,当 hcl
的值符合要求的规范时返回 True(它在函数的多行注释中)。我想检查的第一件事是该值的长度是否正确(应该是 # + 6 个其他字符),当正确时我会检查所有字符是否都在 a 组或 0-9 组中 - 那是我的想法来解决这个问题,但不幸的是有一个
ValueError: substring not found
(当列表的第二个元素进入函数时),我不明白(顺便说一句。一如既往,你有一些推理,当有错误时你找不到它,因为对你来说一切正在工作,这“应该工作”)。
def check_hcl(line):
'''
a # followed by exactly six characters 0-9 or a-f.
'''
print(line[line.index(':')+1],len(line[line.index(':')+2:]))
if line[line.index(':')+1] != '#' or len(line[line.index(':')+2:]) != 6:
return False
else:
return True
list = ['hcl:#866857','#52a9af','#cfa07d','7d3b0c','#cc0362','#a9784']
#false #false
for i in list:
print(check_hcl(i))
解决方法
import re
def check_hcl(line):
if re.match("(.*?)#[a-f0-9]{6}",line):
return True
return False
list = ['hcl:#866857','#52a9af','#cfa07d','7d3b0c','#cc0362','#a9784']
for i in list:
print(check_hcl(i))
输出:
True
True
True
False
True
False
说明:
模式 (.*?)#[a-f0-9]{6}
可以分解为 3 个部分:
-
(.*?)
匹配任何长度的任何内容,包括长度为0
的子字符串。 -
#
匹配'#'
。 [a-f0-9]{6}
匹配长度为a
的字符f
到0
和数字9
到6
的子串。>
感谢@Ian。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。