【问题标题】:Regex matching MAC address正则表达式匹配 MAC 地址
【发布时间】:2015-06-10 15:52:03
【问题描述】:

我正在尝试从此字符串中获取所有有效的 MAC 地址:

00:1e:68:51:4f:a9    <-> 00:1a:8c:10:ad:30          9       540       8       336      17       876    90.457130000       198.0143

我已经尝试过这个和其他一些正则表达式:

^([0-9A-F]{2}[:]){5}([0-9A-F]{2})$

此处为正则表达式 101:

https://regex101.com/r/kI5nI6/1

我不知道为什么我没有得到任何匹配。

【问题讨论】:

    标签: python regex mac-address


    【解决方案1】:
    • 你必须删除锚^$

    • 你必须在你的字符集中添加a-z..或者使用(?i)(i修饰符)使搜索不区分大小写

    以下将起作用:

    ([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})
    

    DEMO

    【讨论】:

    • 但在您的演示中,您匹配的是每个 MAC 地址中的最后两个字节。它似乎与整个 MAC 地址不匹配
    • 它匹配整个mac地址..但是颜色是因为你正在使用的捕获组( )..现在检查演示..
    【解决方案2】:

    锚点^$ 表示仅匹配作为 MAC 地址的字符串,而不匹配作为 MAC 地址的字符串中的部分。此外,您的正则表达式使用大写字母 (A-F),但该字符串中的 MAC 地址是小写的。您是否在进行不区分大小写的搜索(如果使用re 模块,那将是re.IGNORECASE)?尝试打开不区分大小写的搜索或在 A-F 后添加“a-f”。

    附带说明,没有理由将: 包含在方括号中([:]),因为这意味着“匹配这个字符中的任何一个”。你可以直接使用:

    不区分大小写,你应该可以使用这个:

    ([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})
    

    不区分大小写:

    ([0-9A-F]{2}:){5}([0-9A-F]{2})
    

    【讨论】:

    • 我不知道我是否遗漏了什么,但请看这里:regex101.com/r/aQ9vX0/1 你的正则表达式与两个完整的 mac 地址都不匹配
    • 那是因为您还需要“全局”标志(正则表达式右侧的文本框中的“g”)。这使得它可以在一行中搜索多个匹配项:regex101.com/r/aQ9vX0/2
    猜你喜欢
    • 2016-12-15
    • 2014-07-14
    • 2013-09-17
    • 1970-01-01
    • 2012-03-12
    • 2012-04-27
    • 1970-01-01
    • 2012-05-17
    • 2011-08-17
    相关资源
    最近更新 更多