Esta no es la solución más corta, pero acepta todos los tipos de formatos mac como entradas. También realiza algunas verificaciones de validación.
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
Aquí es una lista de cadenas de direcciones MAC y si van a ser considerados como válidos o no válidos:
'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
Todos los válidos serán devueltos en forma canónica como:
'00:80:41:ae:fd:7e'
http://stackoverflow.com/questions/4959741/python-print-mac-address-out-of-6-byte-string –
@EricFortis, ese ejemplo es diferente, donde la dirección MAC está en una cadena binaria. Esta pregunta tiene una cadena ascii como punto de partida – TJD
@Eric: ligeramente diferente, vi esta pregunta y respuesta pero no respondió a esta pregunta específica – jftuga