【发布时间】:2014-12-09 19:24:05
【问题描述】:
我有以下文本文件,在解析 IP 地址时需要一些帮助。
文本文件的格式为
abc 10.1.1.1/32 aabbcc
def 11.2.0.0/16 eeffgg
efg 0.0.0.0/0 ddeeff
换句话说,大量 IP 网络作为日志文件的一部分存在。输出应提供如下:
10.1.1.1/32
11.2.0.0/16
0.0.0.0/0
我有以下代码,但没有输出所需的信息
file = open(filename, 'r')
for eachline in file.readlines():
ip_regex = re.findall(r'(?:\d{1,3}\.){3}\d{1,3}', eachline)
print ip_regex
【问题讨论】:
-
尝试描述每一行代码的作用,你会发现错误。也请参阅重新文档。
-
好吧,你没有在你的正则表达式中包含任何内容来匹配最后的
/32或类似的东西,所以它当然只会匹配10.1.1.1或类似的东西。 -
re.findall("\d+\.\d+\.\d+\.\d+\/\d+",file.read()),你也应该使用with来打开你的文件 -
附带说明,这里没有理由使用
readlines()。file已经是一个可迭代的行。你所做的只是浪费地强迫 Python 在你使用它之前读取和解析内存中的整个文件。 -
另外说明,这些不是 IP 地址,而是 IP 网络,其中包含地址和位掩码。事实上,您现有的代码已经查找属于这些网络的 IP 地址……