import re
regex = re.compile(r"(object-group service (?P<name>.+)(?:\n |.)|service-object (?P<protocol>.+) destination eq (?P<port_no1>\d{0,5} |\w{0,10}.+)\n|service-object (?P<protocol2>object) (?P<port_no2>\d{0,5} |\w{0,10}.+)\n)", flags=re.MULTILINE)
test_str = ("object-group service DM_INLINE_SERVICE_8\n"
" service-object tcp destination eq ldap\n"
" service-object udp destination eq syslog\n"
" service-object object kerberos5-tcp\n"
" service-object object kerberos5-udp\n"
" service-object object ldap-udp\n"
" service-object udp destination eq domain\n"
" service-object object ldap-gcs\n"
" service-object object TCP_3268\n"
" service-object object TCP_3269\n"
" service-object object TCP_445\n"
" service-object tcp-udp destination eq domain\n"
" service-object tcp destination eq ldaps\n"
" service-object udp destination eq ntp\n"
" service-object object TCP_464\n"
"object-group network DM_INLINE_NETWORK_13\n"
" network-object object IN_V030_197_memcache_01\n"
" network-object object IN_V030_198_memcache_02\n"
"object-group service DM_INLINE_SERVICE_9\n"
" service-object tcp destination eq ldap\n"
" service-object udp destination eq syslog\n"
" service-object object kerberos5-tcp\n"
" service-object object kerberos5-udp\n"
" service-object object ldap-udp\n"
" service-object udp destination eq domain\n"
" service-object object ldap-gcs\n"
" service-object object TCP_3268\n"
" service-object object TCP_3269\n"
" service-object object TCP_445\n"
" service-object tcp-udp destination eq domain\n"
" service-object tcp destination eq ldaps\n"
" service-object udp destination eq ntp\n"
" service-object object TCP_464\n")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html