0

我正在编写一个 Python 脚本,它将采用 CIDR 格式的 IP 地址(即 1.1.1.0/32 或 10.0.0.1/24)并将 IP 分成三部分:前三个八位字节(1.1.1),最后一个八位字节 (0) 和子网掩码 (32)。IP 的长度是可变的,所以我不知道是否可以使用某种字符串字符计数器。

有任何想法吗?

谢谢

4

6 回答 6

4

正则表达式可能很麻烦。您还可以使用 split() 函数

inp = '192.168.0.1/24'
ip, submask = inp.split('/')
octets = ip.split('.')
于 2017-03-09T15:57:47.617 回答
3

使用正则表达式:

#!/usr/bin/python
import re


def extractIP( ipStr):

    l = re.split('(.*)\.(.*)\.(.*)\.(.*)/(.*)', ipStr)
    return l[1:-1]

print extractIP("1.2.3.45/35")
于 2013-03-28T15:22:58.187 回答
3

将 IP 解析为 int,并使用按位运算符来获取它。

另一种方法是使用像ipaddr-py这样的库。我个人更喜欢图书馆。

于 2013-03-28T15:18:14.297 回答
0

我会使用正则表达式。您可以使用 r' 将所有八位字节拆分为一个列表。然后以您喜欢的任何顺序重新组合它们。你可以写一个更复杂的re来一次性完成,但我认为这会有点困难。

import re
ip = '1.1.1.1/32'
re.split(r'(\.|/)', ip)
于 2013-03-28T15:19:32.073 回答
0

在这种情况下使用正则表达式会很简单。

(\d{,3}\.\d{,3}\.\d{,3})\.(\d{,3})\/(\d+)

结合使用该re.match方法将产生您的结果。

于 2013-03-28T15:25:55.273 回答
0
ipstring="192.168.1.1/12"
s=re.split(r"\b(\d{1,3}\.\d{1,3}\.\d{1,3})\.(\d{1,3})\/(\d+)\b",ipstring)
print s
['', '192.168.1', '1', '12', '']
print s[1]
192.168.1
print s[2]
1
print s[3]
12
>>> 

于 2020-05-30T20:35:31.710 回答