Python-从字符串解析IPv4地址(即使经过审查)

目标:编写Python 2.7代码以从字符串中提取IPv4地址。


字符串内容示例:


以下是IP地址:192.168.1.1、8.8.8.8、101.099.098.000。这些也可以显示为192.168.1 [。] 1或192.168.1(。)1或192.168.1 [dot1]或192.168.1(dot)1或192 .168 .1 .1或192. 168. 1 1.并且这些检查方法可以应用于任何点(例如:192 [。] 168 [。] 1 [。] 1)。


从上面可以看到,我正在努力寻找一种方法来解析一个txt文件,该文件可能包含以“检查”(以防止超链接)的多种形式描述的IP。


我认为正则表达式是行之有效的方法。也许说些什么;四个整数0-255或000-255的任何组合,以“分隔符列表”中的任何内容分隔,该分隔符由句点,方括号,括号或任何其他上述示例组成。这样,可以根据需要更新“分隔符列表”。


不知道这是否是正确的方法甚至是可能的方法,对此将提供任何帮助,我们将不胜感激。


更新: 由于下面的递归答案,我现在在上面的示例中使用了以下代码。它会...


找到IP

将它们放入列表

清理它们的空间/大括号/等

并将未清除的列表条目替换为已清除的列表条目。

注意:以下代码不能解释不正确/无效的IP,例如192.168.0.256或192.168.1.2.3。目前,它将删除前面提到的尾随的6和3。如果其第一个八位位组无效(例如:256.10.10.10),它将删除前导2(结果为56.10.10.10)。


import re


def extractIPs(fileContent):

    pattern = r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)([ (\[]?(\.|dot)[ )\]]?(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3})"

    ips = [each[0] for each in re.findall(pattern, fileContent)]   

    for item in ips:

        location = ips.index(item)

        ip = re.sub("[ ()\[\]]", "", item)

        ip = re.sub("dot", ".", ip)

        ips.remove(item)

        ips.insert(location, ip) 

    return ips


myFile = open('***INSERT FILE PATH HERE***')

fileContent = myFile.read()


IPs = extractIPs(fileContent)

print "Original file content:\n{0}".format(fileContent)

print "--------------------------------"

print "Parsed results:\n{0}".format(IPs)


拉丁的传说
浏览 238回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python