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この方法で文字列に挿入します(文字列の書式設定を使用):

Python <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 に答える