【问题标题】:RegEx for matching MAC address or 'N A'用于匹配 MAC 地址或“N A”的正则表达式
【发布时间】:2019-05-20 19:24:46
【问题描述】:

我有一个正确匹配我正在处理的数据子集的正则表达式。当我针对完整的数据集运行它时,它开始失败。我注意到一些价值观是 'NA' 与 MAC 地址或 AP 名称,具体取决于列。

样本数据:

00:0b:85:57:bc:c0     00:0b:85:57:bc:c1     AP1130         10.10.163.217     Joined
00:1c:0f:81:db:80     00:1c:63:23:ac:a0     AP1140         10.10.163.216     Joined
00:1c:0f:81:fc:20     00:1b:d5:9f:7d:b2     AP1            10.10.163.215     Joined
00:1c:0f:81:fc:20     N A                   N A            10.10.163.215     Not joined
00:21:1b:ea:36:60     00:0c:d4:8a:6b:c1     AP2            10.10.163.214     Joined

正则表达式:

((?:(?:[0-9a-f]{2}[:-]){5})(?:[0-9a-f]{2}))(?:\s+?)(((?:(?:[0-9a-f]{2}[:-]){5})(?:[0-9a-f]{2}))|(N A))(?:\s+)((AP.+?)|(N A))(?:\s)

我已经修改了我的正则表达式,但它仍然不匹配 MAC 地址或“NA”。 名称字段相同:匹配 AP 名称或“N A”

我的工作现状:https://regex101.com/r/sgGEzh/1

我假设我的括号不正确,但我看不到我的 (|) OR 运算符在哪里失败。我现在正在复制一些组。

我应该匹配第一个 MAC 地址,第二个 MAC 地址字符串“N A”,最后是 AP 名称​​或字符串“N A”。

我应该总是每行得到三个匹配的组。

直到我尝试处理“N A”字符串。

【问题讨论】:

    标签: regex python-3.x regex-lookarounds regex-group regex-greedy


    【解决方案1】:

    这是我对您的输入数据和要求的看法:

    ([a-f0-9]{2}(?::[a-f0-9]{2}){5})\s+((?:[a-f0-9]{2}(?::[a-f0-9]{2}){5})|N A)\s+(N A|\S+)
    

    另见https://regex101.com/r/sgGEzh/2

    【讨论】:

      【解决方案2】:

      你匹配了正确的东西,你只需要去掉N AAP.+?周围不需要的捕获组。这些导致这些字符串在结果中最终出现在不同的组中。您只需要 3 个捕获组。

      您还有许多其他不需要的组,例如 \s+? 周围的非捕获组。如果每个 | 备选方案已经在一个组内,则您不需要围绕每个组。量化时,您需要的唯一非捕获组是 [0-9a-f]{2}[:-] 周围的组。

      以下工作并删除所有冗余组:

      ((?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2})\s+?((?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}|N A)\s+(AP.+?|N A)\s
      

      DEMO

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-15
        • 1970-01-01
        • 2014-07-14
        • 1970-01-01
        • 1970-01-01
        • 2013-09-17
        • 1970-01-01
        相关资源
        最近更新 更多