小编典典

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

python

目标: 编写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)

阅读 220

收藏
2021-01-20

共1个答案

小编典典

下面的代码将…

  • 即使经过审查也可以找到字符串中的IP(例如:192.168.1 [20]或10.10.10 .21)
  • 将它们放入列表
  • 清除检查内容(空格/花括号/括号)
  • 并将未清除的列表条目替换为已清除的列表条目。

注意:
以下代码不能解释不正确/无效的IP,例如192.168.0.256或192.168.1.2.3。当前,它将删除尾随数字(上述数字为6和3)。如果其第一个八位位组无效(例如:256.10.10.10),它将删除前导数字(结果为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)

`

2021-01-20