用Python解析IP的正则表达式

时间:2012-07-21 14:32:17

标签: python regex

我目前正在尝试为Bind9服务器编写任务脚本。目标是让用户以下列格式输入IP地址:

192.168.90.150

然后我想让Python获取该IP地址并将其分解为4个不同变量中的4个不同分组

192.168.90.150 would become...

first  = 192 
second = 168
third  = 90
fourth = 150

我认为这样做的“行业标准”方式是使用正则表达式。我试图使用以下搜索字符串来识别由句点分隔的1-3个数字字符的分组。以下不起作用。

ipaddy = raw_input('Enter IP address: ')

failsearch1 = re.search(r'\d+\.')
failsearch2 = re.search(r'\d\.')
failsearch3 = re.search(r'(\d)+\.')

for x in ipaddy:
    a = search.failsearch1(x)
    b = search.failsearch2(x)
    c = search.failsearch3(x)
    if a or b or c:
        print('Search found')

上面代码的输出都没有。

我还尝试过这些搜索字符串的其他几种变体。有没有人有任何想法如何将一个典型的IP地址(192.168.10.10)转换成4个不同的分组,基于句点之间的分离?

任何建议都将不胜感激。感谢。

5 个答案:

答案 0 :(得分:3)

验证: How to validate IP address in Python?

+加

  

第一,第二,第三,第四= str(ipaddy).split('。')

答案 1 :(得分:3)

如果您有理由相信输入将是虚线形式的IPv4,那么您甚至不需要正则表达式:

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

答案 2 :(得分:1)

你可以使用内置的str函数。

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)

答案 3 :(得分:0)

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]

测试:

>>> 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

然后你有一个列表而不是4个变量,这更像是Pythonic和更清晰。

答案 4 :(得分:0)


列出字节:

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