import re
regex = re.compile(r"\d: (?!<)[^\n]+(?:\n .*)*")
test_str = ("1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1\n"
" link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n"
" inet 127.0.0.1/8 scope host lo\n"
" valid_lft forever preferred_lft forever\n"
" inet6 ::1/128 scope host \n"
" valid_lft forever preferred_lft forever\n"
"2: lan1: <BROADCAST,MULTICAST,UP,LOWER_UP8000> mtu 1500 qdisc mq qlen 1000\n"
" link/ether 00:60:e0:6a:48:26 brd ff:ff:ff:ff:ff:ff\n"
" inet 10.32.39.55/24 brd 10.32.39.255 scope global lan1\n"
" valid_lft forever preferred_lft forever\n"
"3: lan2: <BROADCAST,MULTICAST,UP,LOWER_UP8000> mtu 1500 qdisc mq qlen 1000\n"
" link/ether 00:60:e0:6a:48:27 brd ff:ff:ff:ff:ff:ff\n"
" inet 192.168.90.1/20 brd 192.168.95.255 scope global lan2\n"
" valid_lft forever preferred_lft forever\n"
"4: sit0@NONE: <NOARP> mtu 1480 qdisc noop qlen 1\n"
" link/sit 0.0.0.0 brd 0.0.0.0\n"
"6: wwp0s29u1u3i12: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000\n"
" link/ether 00:00:11:12:13:14 brd ff:ff:ff:ff:ff:ff\n"
" inet 172.16.224.124/16 brd 172.16.255.255 scope global wwp0s29u1u3i12\n"
" valid_lft forever preferred_lft forever")
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