import re from typing import List import ipaddress entry = "test_range (2001:DB8:0:CD30::10-2001:DB8:0:CD30::100)" entries: List[str] = [ "TEST_GEO_GROUP (82 countries)", "Asia (50 countries)", "Europe (55 countries)", "IPv4-Private-10.0.0.0-8 (10.0.0.0/8)", "IPv4-Private-172.16.0.0-12 (172.16.0.0/12)", "IPv4-Private-192.168.0.0-16 (192.168.0.0/16)", "OutsideIPv4DefaultRoute (0.0.0.0/0)", "test_fqdnv4 (ad4.example.com)", "brazil", "chile", "colombia", "ecuador", "test_fqdn (ad.example.com)", "test_fqdnv4 (ad4.example.com)", "test_fqdnv6 (ad6.example.com)", "test_range (2001:DB8:0:CD30::10-2001:DB8:0:CD30::100)", ] pattern = re.compile( r"(^(?P.+)\s\(((?P\d+\s\w+)|(?P.+-.+)|(?P([a-zA-Z0-9._-])+)|(?P(\d+\.){3}\d+\/\d{1,3}))\)$)|^(?P\w+$)" ) for test_string in entries: match = pattern.match(test_string) if match: print(f"Matched: {test_string}") print("Groups:", match.groupdict()) else: print(f"No match: {test_string}") print("") addresses: List[str] = [ "2001:DB8:0:CD30::100", "192.168.0.0/16", "::/0", "2001:DB8::0DB8:800:200C:417A", ] for addr in addresses: try: res = ipaddress.ip_address(addr) print(res) continue except ValueError: print(f"{addr} is not an address, trying network") try: res = ipaddress.ip_network(addr) print(res) except ValueError: print(f"{addr} is not a network, ERROR~!!!")