import re
regex = re.compile(r"(?<!-)(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}(?!-)", flags=re.IGNORECASE)
test_str = ("Windows IP Configuration\n\n"
" Host Name . . . . . . . . . . . . : CheziAndSima-PC\n"
" Primary Dns Suffix . . . . . . . : \n"
" Node Type . . . . . . . . . . . . : Hybrid\n"
" IP Routing Enabled. . . . . . . . : No\n"
" WINS Proxy Enabled. . . . . . . . : No\n"
" DNS Suffix Search List. . . . . . : kramer.local\n\n"
"Ethernet adapter Local Area Connection:\n\n"
" Connection-specific DNS Suffix . : \n"
" Description . . . . . . . . . . . : Atheros AR8151 PCI-E Gigabit Ethernet Controller (NDIS 6.20)\n"
" Physical Address. . . . . . . . . : 50-E5-49-CE-FC-EF\n"
" DHCP Enabled. . . . . . . . . . . : Yes\n"
" Autoconfiguration Enabled . . . . : Yes\n"
" Link-local IPv6 Address . . . . . : fe80::5cba:e9f2:a99f:4499%11(Preferred) \n"
" IPv4 Address. . . . . . . . . . . : 10.0.0.1(Preferred) \n"
" Subnet Mask . . . . . . . . . . . : 255.255.255.0\n"
" Lease Obtained. . . . . . . . . . : ™ 06 €…‚…‘ˆ 2016 20:35:49\n"
" Lease Expires . . . . . . . . . . : ‰…™‰™‰ 09 €…‚…‘ˆ 2016 21:05:49\n"
" Default Gateway . . . . . . . . . : 10.0.0.138\n"
" DHCP Server . . . . . . . . . . . : 10.0.0.138\n"
" DHCPv6 IAID . . . . . . . . . . . : 240182601\n"
" DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-19-7A-1F-FC-50-E5-49-CE-FC-EF\n"
" DNS Servers . . . . . . . . . . . : 10.0.0.138\n"
" NetBIOS over Tcpip. . . . . . . . : Enabled\n\n"
"Ethernet adapter Local Area Connection* 11:\n\n"
" Connection-specific DNS Suffix . : kramer.local\n"
" Description . . . . . . . . . . . : Juniper Networks Virtual Adapter\n"
" Physical Address. . . . . . . . . : 02-05-85-7F-EB-80\n"
" DHCP Enabled. . . . . . . . . . . : No\n"
" Autoconfiguration Enabled . . . . : Yes\n"
" Link-local IPv6 Address . . . . . : fe80::8dfb:6d42:97e1:2dc7%19(Preferred) \n"
" IPv4 Address. . . . . . . . . . . : 172.16.2.7(Preferred) \n"
" Subnet Mask . . . . . . . . . . . : 255.255.255.255\n"
" Default Gateway . . . . . . . . . : \n"
" DHCPv6 IAID . . . . . . . . . . . : 436340101\n"
" DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-19-7A-1F-FC-50-E5-49-CE-FC-EF\n"
" DNS Servers . . . . . . . . . . . : 172.16.0.6\n"
" 172.16.0.91\n"
" NetBIOS over Tcpip. . . . . . . . : Enabled\n\n"
"Tunnel adapter isatap.{899E5284-7FD6-4831-B397-9BA931E543E1}:\n\n"
" Media State . . . . . . . . . . . : Media disconnected\n"
" Connection-specific DNS Suffix . : \n"
" Description . . . . . . . . . . . : Microsoft ISATAP Adapter\n"
" Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0\n"
" DHCP Enabled. . . . . . . . . . . : No\n"
" Autoconfiguration Enabled . . . . : Yes\n\n"
"Tunnel adapter Teredo Tunneling Pseudo-Interface:\n\n"
" Media State . . . . . . . . . . . : Media disconnected\n"
" Connection-specific DNS Suffix . : \n"
" Description . . . . . . . . . . . : Teredo Tunneling Pseudo-Interface\n"
" Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0\n"
" DHCP Enabled. . . . . . . . . . . : No\n"
" Autoconfiguration Enabled . . . . : Yes\n\n"
"Tunnel adapter isatap.kramer.local:\n\n"
" Media State . . . . . . . . . . . : Media disconnected\n"
" Connection-specific DNS Suffix . : kramer.local\n"
" Description . . . . . . . . . . . : Microsoft ISATAP Adapter #2\n"
" Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0\n"
" DHCP Enabled. . . . . . . . . . . : No\n"
" Autoconfiguration Enabled . . . . : Yes\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