1

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

谢谢,

4

1 回答 1

5

以这种方式插入x字符串(使用字符串格式化):

蟒蛇<2.7:

if re.match("[0-9a-fA-F]{2}([.-: ][0-9a-fA-F]{2}){%d}$" % x, self.input_value):

但是,如果您使用 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 实际上不会对它做任何事情。

于 2013-01-06T00:31:59.937 回答