正则表达式匹配MAC地址并提取其值

2024-04-28 09:40:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着首先检查一个字符串是否符合MAC地址的格式,如果符合,我想从字符串中提取所有字节值。在

到目前为止,我写了这篇文章,它成功地匹配了mac地址的格式是否正确:

 mac_regx = re.compile(r'^([0-9A-F]{1,2})(\:[0-9A-F]{1,2}){5}$', re.IGNORECASE)

但是当我使用这个正则表达式来提取字节值时,我只得到第一个和最后一个:

^{pr2}$

我知道我可以简单地split通过:来完成这项工作。我只是希望能够同时完成匹配和值提取,只需使用一个regex一步。在


Tags: 字符串re字节mac地址格式regexsplit
3条回答

如果需要所有匹配项,则应避免使用{5}

mac_regx = re.compile(r'^([0-9A-F]{1,2})\:([0-9A-F]{1,2})\:([0-9A-F]{1,2})\:([0-9A-F]{1,2})\:([0-9A-F]{1,2})\:([0-9A-F]{1,2})$', re.IGNORECASE)

或者,再短一点

^{pr2}$

您还可以列出一个字符串'[0-9A-F]{1,2})'的6个实例,并用'\:'将它们连接起来。在

我作弊并使用了mauro.stettler提交的变体。我认为这是非常清楚和直截了当的一句话。mac_validation应返回True或{}。谢谢马里奥!在

import re
mac_validation = bool(re.match('^' + '[\:\-]'.join(['([0-9a-f]{2})']*6) + '$', mac_input.lower()))

有许多不同的可能格式。因此,单个正则表达式可能很难处理所有这些问题。在

如果您愿意使用代码而不是regex,the IPAddress Java library将同时处理各种格式。在

库将读取MAC地址的最常用格式,如aa:bb:cc:dd:ee:ff、aa-bb-cc-dd-ee-ff,aabb.ccdd.eeff,aa-bb-cc-dd-ee-ff,它支持48位或64位的地址,还允许您指定地址范围,如aa-ff:bb:cc:*:ee:ff

验证地址是否有效:

    String str = "aa:bb:cc:dd:ee:ff";
    MACAddressString addrString = new MACAddressString(str);
    try {
         MACAddress addr = addrString.toAddress();
         //extract values with addr.getSegment(i).getLowerSegmentValue()
         ...
    } catch(AddressStringException e) {
        //e.getMessage provides validation issue
    }

相关问题 更多 >