Я пытаюсь использовать функции REGEXP_MATCH, REGEXP_EXTRACT в таблице, чтобы изолировать «назначенный порт» от набора данных.
У меня ужасное время с записями, у которых есть ведущий '-', я пробовал следующее, и лучшее, что я могу получить, это 4-значные цифры с ведущим "-", которые мне не нужны. Я хочу, чтобы он возвращал цифру-цифру с таким количеством цифр, которое соответствует этим критериям.
первое решение:
(\d*-\d*)*
второе решение:
(\d*-(\d*-\d*-\d*-\d*))
третье решение (возвращается только в формате '1-1-1-1', соответствует как -1-1-1-1):
([0-9]{0,3}-[0-9]{0,3}-[0-9]{0,3}-[0-9]{0,3}-[0-9]{0,3})
Пример данных:
NETWORK-1-1-1-1
ACCESS-1-1-1-1
FA0/1
GE-0/2/3
XE-2/1/10
GI0/0/1
GIGABIT ETHERNET 1-1-2
1-1-2-100
1-1-2-10.943
Желаемая изоляция (выделено жирным шрифтом)
СЕТЬ- 1-1-1-1
ДОСТУП- 1-1-1-1
FA0 / 1
GE-0 / 2/3
XE-2/1/10
GI0 / 0/1
GIGABIT ETHERNET 1-1-2
1-1-2 -100
1-1-2-10 .943
Желаемый возврат
1-1-1-1
1-1-1-1
excluded
excluded
excluded
excluded
1-1-2
1-1-2-100
1-1-2-10
Формула таблицы с совпадением и извлечением Regex:
IF REGEXP_MATCH([Port Access Less VLAN],'(\d{0,3}\/\d{0,3}\/\d{0,3})')
THEN REGEXP_EXTRACT([Port Access Less VLAN],'(\d{0,3}\/\d{0,3}\/\d{0,3})')
ELSEIF REGEXP_MATCH([Port Access Less VLAN],'(\d{0,3}\/\d{0,3})')
THEN REGEXP_EXTRACT([Port Access Less VLAN],'(\d{0,3}\/\d{0,3})')
ELSEIF REGEXP_MATCH([Port Access Less VLAN],'([0-9]{0,3}-[0-9]{0,3}-[0-9]{0,3}-[0-9]{0,3}-[0-9]{0,3})')
THEN REGEXP_EXTRACT([Port Access Less VLAN],'([0-9]{0,3}-[0-9]{0,3}-[0-9]{0,3}-[0-9]{0,3}-[0-9]{0,3})')
ELSE NULL
END
Таблица результатов:
1-1-1-1
1-1-1-1
0/1
0/2/3
2/1/10
0/0/1
1-1-2
1-1-2-100
1-1-2-10
(\d+(?:-\d+)+)
- person Wiktor Stribiżew   schedule 17.01.2018(\d+(-\d+)+)
или(\d+-\b[-0-9]+\b)
- person Wiktor Stribiżew   schedule 17.01.2018