在Python类中传递变量

时间:2013-01-06 00:30:34

标签: python

我有以下课程。但是当试图将变量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吗?

谢谢,

1 个答案:

答案 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实际上不会对它做任何事情。