RegEx для сопоставления MAC-адреса или «N A» - PullRequest
1 голос
/ 20 мая 2019

У меня было регулярное выражение, которое правильно соответствовало подмножеству данных, которые я обрабатывал.Когда я запустил его с полным набором данных, он начал сбой.Я заметил, что некоторые значения были «NA» по сравнению с MAC-адресом или именем точки доступа, в зависимости от столбца.

Пример данных:

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

Regexp:

((?:(?:[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».То же самое для поля имени: совпадают с именем точки доступа или 'N A'

Моя работа в том виде, в каком она есть: https://regex101.com/r/sgGEzh/1

Я предполагаю, что мои скобки неверны, но я не вижугде мой (|) ИЛИ оператор не работает.Я получаю дублирование некоторых групп.

Я должен сопоставить первый MAC-адрес, второй MAC-адрес или , строку «N A» и, наконец, имя AP или строка 'N A'.

Я всегда должен получать по три совпадающие группы на строку.

Я был до тех пор, пока не попытался обработать строки 'NA'.

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Вы подходите правильно, вам просто нужно избавиться от ненужных групп захвата вокруг N A и AP.+?. Это приводит к тому, что эти строки в результате оказываются в разных группах. Вам нужно только 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

1 голос
/ 20 мая 2019

Это мой взгляд на ваши входные данные и требования:

([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

...