我正在尝试创建一种方法来校对命令控制台输入,并检查以确保字符串是一个rgb十六进制字符串。(例如:#FAF0E6)目前我正在使用try:except:block。在
def isbgcolor(bgcolor):
#checks to see if bgcolor is binary
try:
float(bgcolor)
return True
except ValueError:
return False
我也尝试过使用.startswith('#')。我已经看过如何用Java编写这个函数的例子,但我还是个初学者,我只知道Python。帮忙吗?在
通常,查看字符串是否与某个简单格式匹配的最佳方法是实际尝试解析它。(尤其是如果您只是检查以便在有效的情况下可以解析它,如果无效则打印错误。)那么,让我们这样做。在
标准库中充满了各种有用的东西,因此总是值得搜索的。如果您想解析一个十六进制字符串,首先出现的是^{} 。我们要取消激活第一个
#
字符之后的所有内容。所以:它接受3个字符的十六进制字符串(但大多数使用}还是{}?我不知道,但如果你想增加一条规则的话,你应该知道。在
#
-前缀的十六进制RGB的数据格式也是如此),甚至16个字符的。如果你想增加一个长度检查,你可以加上。规则是== 6
还是{如果你开始使用
parse_bgcolor
,你会发现它给你一个bytes
,有6个0-255的值,而你真正想要的是3个0-65535的值。您可以手动组合它们,也可以将每个两个字符对解析为一个数字(例如,用int(pair, 16)
),也可以将已有的6个字符bytes
输入,比如struct.unpack('>HHH')
。一旦你明确知道你想做什么,你需要做的事情就很容易了。在最后,如果您试图解析CSS或HTML,像}这样的颜色也是有效的。你需要处理这些吗?如果是这样的话,你需要比这更聪明的东西。要做的第一件事是查看规范中要解析的内容,并找出需要转换为代码的规则。然后你就可以写代码了。在
red
或{以下内容将匹配十六进制RGB字符串:
如果传入的字符串以
#
开头,后跟6个十六进制数字,则只返回True
。在演示:
^{pr2}$如果还想支持3位数的CSS格式,请更新模式:
这将匹配一个哈希值,后跟3个十六进制数字,外加一个可选的3个额外数字。在
这似乎是最简单的方法。此正则表达式将注意到
P
不属于十六进制。在…所以如果
re.findall
的结果中有什么问题,那就是你的十六进制结构有问题。在此代码导致:
^{pr2}$这段代码有一个缺陷,哈希表可以在任何地方,这当然是不对的。在
您可能只需要检查字符串开头的哈希表,以便更容易识别正则表达式。然后只检查其他字符是否符合正则表达式检查中允许的字符。在
相关问题 更多 >
编程相关推荐