import re
regex = re.compile(r"(?:^|\b(?<!\.))(?:1?\d?\d|2[0-4]\d|25[0-5])(?:\.(?:1?\d?\d|2[0-4]\d|25[0-5])){3}(?=$|[^\w.])", flags=re.MULTILINE)
test_str = ("My input string & constraints are as follows :\n\n"
" IPv4 Range : 0.0.0.0 to 255.255.255.255 55.123.99.988 256.1.1.1\n"
" IPv4 address may / may not be present in the string\n"
" Valid Examples : this is an ip & this is an ip 200.100.2.32\n"
" String may start with IPv4 address\n"
" Valid Examples :\n"
"200.100.2.32 is an ip | Output : ['200.100.2.32']\n"
" Invalid Examples :\n"
"200.100.2.32is an ip | Output : []\n"
" String may end with IPv4 address\n"
" Valid Examples : the ip is 200.100.2.32\n"
"Output : ['200.100.2.32']\n"
" Invalid Examples : the ip is200.100.2.32\n"
"Output : []\n"
" String may contain an IPv4 address in the middle, and if it does - there will a space before and after the IPv4 address.\n"
" Valid Examples : the ip is 200.100.2.32 and it is ipv4 | Output : ['200.100.2.32']\n"
" Valid Examples : the ip is 200.100.2.32and it is ipv4 | Output : []\n"
" Multiple IPs may be present in a single string\n"
" Valid Examples : 200.100.2.32 100.50.1.16 | Output : ['200.100.2.32', '100.50.1.16']\n"
" Invalid Examples : 200.100.2.32.100.50.1.16 | Output : []\n"
"10.151.0.0,8.8.8.8,127.0.0.1,10.51.0.0,10.151.1.0")
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