Шаблон регулярных выражений для фильтрации многострочных данных для REST API - PullRequest
1 голос
/ 04 ноября 2019

Миграция ASA из ASDM в FMC, включая политику доступа. Одним из шагов для завершения проекта является миграция сетевых / сервисных объектов, их групп в FMC. Планирование создания объектов путем фильтрации объектов ASA (из конфигурации ASA) с помощью регулярных выражений и запуска сценария python в REST API. Теперь проблема, с которой я столкнулся в настоящее время, заключается в большом количестве данных для перемещения в FMC, более 3000 строк.

В настоящее время я пытаюсь найти шаблон регулярного выражения, который бы фильтровал многострочные строки и сопоставлял данные для API REST. Использование regex101 для этой задачи. С текущим шаблоном регулярных выражений я сопоставляю данные только для первых двух строк. Еще одна проблема, с которой я столкнулся, заключалась в том, что не во всех строках указывалось 'target eq', после чего регулярное выражение совпадает с 'port_no'.

Сможет ли кто-нибудь помочь с выражением регулярного выражения? В соответствии с текущим выражением регулярного выражения хотите сопоставить данные, которые идут после «службы группы объектов», «объекта обслуживания» и «назначения eq» ИЛИ, когда «назначения eq» нет?

Спасибо

Выражение регулярного выражения:

object-group service (?P<name>.+)(?:\n |.)service-object (?P<protocol>.+) destination eq (?P<port_no>\d{0,5} |\w{0,10}.+)\n

Данные для фильтрации:

object-group service DM_INLINE_SERVICE_8
 service-object tcp destination eq ldap
 service-object udp destination eq syslog
 service-object object kerberos5-tcp
 service-object object kerberos5-udp
 service-object object ldap-udp
 service-object udp destination eq domain
 service-object object ldap-gcs
 service-object object TCP_3268
 service-object object TCP_3269
 service-object object TCP_445
 service-object tcp-udp destination eq domain
 service-object tcp destination eq ldaps
 service-object udp destination eq ntp
 service-object object TCP_464
object-group network DM_INLINE_NETWORK_13
 network-object object IN_V030_197_memcache_01
 network-object object IN_V030_198_memcache_02

1 Ответ

0 голосов
/ 04 ноября 2019

Если вы хотите сопоставить данные, которые следуют после 'service-group service', 'service-object' и 'destination eq', вы можете использовать чередование , чтобы сопоставить либо object-group service, либо service-objectи необязательная группа без захвата для destination eq.

^\s*(?:object-group service|service-object) (.+?)(?: destination eq (\w+))?$

По частям

  • ^ Начало строки
  • \s* Соответствие 0+ пробеламсимволы
  • (?:object-group service|service-object) Совпадение 1 из вариантов
  • (.+?) Совпадение пробелов и захват в группе 1 , соответствующих любому символу без жадности
  • (?: Группа без захвата
    • destination eq (\w+) Совпадение пробелов и эквалайзера назначения и захват 1+ символов слова в группе 2
  • )? Закрыть группуи сделайте его необязательным
  • $ Конец строки

Regex demo

...