I am kindof stuck in extracting an IPv4 address from a String.
My input string & constraints are as follows :
- IPv4 Range :
0.0.0.0
to255.255.255.255
- IPv4 address may / may not be present in the string
- Valid Examples :
this is an ip
&this is an ip 200.100.2.32
- Valid Examples :
- String may start with IPv4 address
- Valid Examples :
200.100.2.32 is an ip
| Output :['200.100.2.32']
- Invalid Examples :
200.100.2.32is an ip
| Output :[]
- Valid Examples :
- String may end with IPv4 address
- Valid Examples :
the ip is 200.100.2.32
| Output :['200.100.2.32']
- Invalid Examples :
the ip is200.100.2.32
| Output :[]
- Valid Examples :
- String may contain an IPv4 address in the middle, and if it does - there will a space before and after the IPv4 address.
- Valid Examples :
the ip is 200.100.2.32 and it is ipv4
| Output :['200.100.2.32']
- Valid Examples :
the ip is 200.100.2.32and it is ipv4
| Output :[]
- Valid Examples :
- Multiple IPs may be present in a single string
- Valid Examples :
200.100.2.32 100.50.1.16
| Output :['200.100.2.32', '100.50.1.16']
- Invalid Examples :
200.100.2.32.100.50.1.16
| Output :[]
- Valid Examples :
I am trying to build a regex for the above cases, they look fairly straightforward, and I am not able to incorporate all the regex checks.
I have been referring to the answers on these links : Link1, Link2, Link3
Can someone help me in the right direction? To Summarize :
- IPv4 will have a space before it or starts at the begining of the string
- IPv4 will have a space after it or finishes at the end of the string
- IPv4 obeys the range :
0.0.0.0
to255.255.255.255
Code
def find_ip(str) :
ip_pattern = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s') # need to strengthen the regex here
ip = re.findall(ip_pattern, str)
return ip