我有以下课程。但是当试图将变量x传递给re.match时,它似乎无法正常工作,因为我输入的任何输入都返回“无效”
class validate:
def __init__(self, input_value):
self.input_value = input_value
def macaddress(self, oui):
self.oui = oui
#oui = 0, input deemed valid if it matches {OUI:DEVICE ID}.
#oui = 1, input deemed valid if it matches {OUI}.
if self.oui == 0:
x = 5
elif self.oui == 1:
x = 2
if re.match("[0-9a-fA-F]{2}([.-: ][0-9a-fA-F]{2}){x}$", self.input_value):
return "valid"
else:
return "invalid"
我应该以其他方式传递var x吗?
谢谢,
答案 0 :(得分:5)
以这种方式将x
插入字符串(使用string formatting):
Python< 2.7:
if re.match("[0-9a-fA-F]{2}([.-: ][0-9a-fA-F]{2}){%d}$" % x, self.input_value):
但是,如果你使用formatting的python 3方式,你的正则表达式会干扰 使用串联可以更干净(但更慢)。
没有连接:
if re.match("[0-9a-fA-F]\{2\}([.-: ][0-9a-fA-F]\{2\}){0}$".format(x), self.input_value):
连接:
if re.match("[0-9a-fA-F]{2}([.-: ][0-9a-fA-F]{2})" + x + "$", self.input_value):
注意:如果无法进行隐式类型转换,则会失败。
如果只是将{x}
放在字符串的中间,除非应用了字符串格式,否则Python实际上不会对它做任何事情。