Skip to content Skip to sidebar Skip to footer

Regular Expressions In Python For Dissecting IP

I am currently trying to script a task for my Bind9 server. The goal is to have the user input an IP address in the following format: 192.168.90.150 I would then like Python to ta

Solution 1:

Validation: How to validate IP address in Python?

+plus

first, second, third, fourth = str(ipaddy).split('.')


Solution 2:

If you are reasonably sure the input is going to be an IPv4 in dotted form, you don't even need a regular expression:

assert possible_ip.count(".") == 3
ip_parts = possible_ip.split(".")
ip_parts = [int(part) for part in ip_parts]
first, second, third, fourth = ip_parts

Solution 3:

You can just use the builtin str functions.

try:
    first, second, third, fourth = [int(s) for s in some_text.split('.')]
except ValueError as e:
    print 'Not 4 integers delimited by .'
if not all (0 <= i <= 254 for i in (first, second, third, fourth)):
    print 'Syntax valid, but out of range value: {} in "{}"'.format(i, some_text)

Solution 4:


Make a list of bytes:

>>> [ byte for byte in '192.168.90.150'.split('.') ]
['192', '168', '90', '150']

Solution 5:

def validate_and_split_ip(ip):
    parts = ip.split('.')
    if len(parts) != 4:
        return None

    for part in parts:
        if not part.isdigit() or not 0<=int(part)<=255:
            return None
    return [int(part) for part in parts]

Test:

>>> validate_and_split_ip('123.123.0.255')
[123, 123, 0, 255]
>>> validate_and_split_ip('123.123.0.256') # Returns None
>>> validate_and_split_ip('123.123.123.a') # Returns None

You then have a list rather than 4 variables, which is more Pythonic and cleaner.


Post a Comment for "Regular Expressions In Python For Dissecting IP"