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