用于匹配 MAC 地址或 'N A' 的正则表达式
RegEx for matching MAC address or 'N A'
我有一个正则表达式可以正确匹配我正在处理的数据子集。当我 运行 它针对完整数据集时,它开始失败。我注意到一些价值观是
'N A' 与 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 地址或 'N A'。
名称字段相同:匹配 AP 名称或 'N A'
我目前的工作:https://regex101.com/r/sgGEzh/1
我假设我的括号不正确,但我看不出我的 (|) OR 运算符在哪里失败。我现在得到一些组的重复。
我应该匹配第一个 MAC 地址,第二个 MAC 地址 或 字符串 'N A',最后一个 AP 名称 或字符串'N A'.
我应该总是每行得到三个匹配组。
直到我尝试处理 'N A' 字符串。
这是我对您的输入数据和要求的看法:
([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+)
你正在匹配正确的东西,你只需要去掉 N A
和 AP.+?
周围不需要的捕获组。这些导致这些字符串最终出现在结果的不同组中。您只需要 3 个捕获组。
您还有许多并不真正需要的其他群组,例如 \s+?
周围的 non-capturing 群组。如果每个 |
备选方案已经在一个组中,则不需要围绕它们进行分组。您唯一需要的 non-capturing 组是 [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
我有一个正则表达式可以正确匹配我正在处理的数据子集。当我 运行 它针对完整数据集时,它开始失败。我注意到一些价值观是 'N A' 与 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 地址或 'N A'。 名称字段相同:匹配 AP 名称或 'N A'
我目前的工作:https://regex101.com/r/sgGEzh/1
我假设我的括号不正确,但我看不出我的 (|) OR 运算符在哪里失败。我现在得到一些组的重复。
我应该匹配第一个 MAC 地址,第二个 MAC 地址 或 字符串 'N A',最后一个 AP 名称 或字符串'N A'.
我应该总是每行得到三个匹配组。
直到我尝试处理 'N A' 字符串。
这是我对您的输入数据和要求的看法:
([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+)
你正在匹配正确的东西,你只需要去掉 N A
和 AP.+?
周围不需要的捕获组。这些导致这些字符串最终出现在结果的不同组中。您只需要 3 个捕获组。
您还有许多并不真正需要的其他群组,例如 \s+?
周围的 non-capturing 群组。如果每个 |
备选方案已经在一个组中,则不需要围绕它们进行分组。您唯一需要的 non-capturing 组是 [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