Elegant Format for a MAC Address in Python 3.2

后端 未结 8 2200
无人及你
无人及你 2020-12-19 00:46

I am looking for a more elegant solution to formatting a MAC address with colons. I am using Python 3.2. A fancy list comprehension perhaps?

s=\"\"
h=\"0023         


        
8条回答
  •  春和景丽
    2020-12-19 01:22

    This is not the shortest solution, but it accepts all common types of mac formats as inputs. It also does some validation checks.

    import re
    
    def format_mac(mac: str) -> str:
        mac = re.sub('[.:-]', '', mac).lower()  # remove delimiters and convert to lower case
        mac = ''.join(mac.split())  # remove whitespaces
        assert len(mac) == 12  # length should be now exactly 12 (eg. 008041aefd7e)
        assert mac.isalnum()  # should only contain letters and numbers
        # convert mac in canonical form (eg. 00:80:41:ae:fd:7e)
        mac = ":".join(["%s" % (mac[i:i+2]) for i in range(0, 12, 2)])
        return mac
    

    Here is a list of mac address strings and whether they will be considered as valid or invalid:

    '008041aefd7e',  # valid
    '00:80:41:ae:fd:7e',  # valid
    '00:80:41:AE:FD:7E',  # valid
    '00:80:41:aE:Fd:7E',  # valid
    '00-80-41-ae-fd-7e',  # valid
    '0080.41ae.fd7e',  # valid
    '00 : 80 : 41 : ae : fd : 7e',  # valid
    '  00:80:41:ae:fd:7e  ',  # valid
    '00:80:41:ae:fd:7e\n\t',  # valid
    
    'aa:00:80:41:ae:fd:7e',  # invalid
    '0:80:41:ae:fd:7e',  # invalid
    'ae:fd:7e',  # invalid
    '$$:80:41:ae:fd:7e',  # invalid
    

    All valid ones will be returned in the canonical form as:

    '00:80:41:ae:fd:7e'
    

提交回复
热议问题