Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python Regex to identify IPv4 address from string [duplicate]

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 to 255.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
  • 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 : []
  • 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 : []
  • 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 : []
  • 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 : []

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 to 255.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
like image 935
sudhishkr Avatar asked Oct 31 '22 17:10

sudhishkr


1 Answers

The regex:

(?:^|\b(?<!\.))(?:1?\d\d?|2[0-4]\d|25[0-5])(?:\.(?:1?\d\d?|2[0-4]\d|25[0-5])){3}(?=$|[^\w.])

An example of matches.

like image 195
Dmitry Sokolov Avatar answered Nov 08 '22 17:11

Dmitry Sokolov