通过python正则表达式忽略ip地址第一个八位字节中的这两个数字(以127或0开头)

通过python正则表达式忽略ip地址第一个八位字节中的这两个数字(以127或0开头),python,regex,python-3.x,python-2.7,ip-address,Python,Regex,Python 3.x,Python 2.7,Ip Address,我有一个IP的列表存储在一个文本文件中,以及一些其他数据,我试图从中仅grep有效的IP。在这里,我有一些IP,比如0.0.0.0和localhost IP(从127开始…),我试图使用regex消除它们。 这里是我提出的正则表达式模式,它过滤0.0.0.0 IP,但不能有效地删除127..*IP import re with open("data","r") as f: for line in f: test = re.search(r'(?!0|127)\d{1,3}

我有一个IP的列表存储在一个文本文件中,以及一些其他数据,我试图从中仅grep有效的IP。在这里,我有一些IP,比如0.0.0.0和localhost IP(从127开始…),我试图使用regex消除它们。 这里是我提出的正则表达式模式,它过滤0.0.0.0 IP,但不能有效地删除127..*IP

import re
with open("data","r") as f:
    for line in f:
        test = re.search(r'(?!0|127)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', line)
        if test:
            print(test.group(0))
IP位于文本文件中,如下所示:

127.3.65.7
alkjgfbvui vluiybr vk ru r127.0.0.1fal;iufnaw  waoun
12.0.1.5
mjhgvjg0.0.0.0kjuycuj
0.0.0.0
0.0.0.0
gare bloing r pgnao wyin212.2.174.64
207.71.31.224
awuie nvp; vwa rv;awiu n ;lkirjght94.206.93.104ta;wourit mrt'
172.20.128.1
172.20.164.207
172.20.164.203
172.20.164.209
1.8.0.144
我得到以下输出,您可以看到以127开头的IP也通过删除第一个数字“1”打印出来

27.3.65.7
27.0.0.1
12.0.1.5
212.2.174.64
207.71.31.224
94.206.93.104
172.20.128.1
172.20.164.207
172.20.164.203
172.20.164.209
1.8.0.144
试试正则表达式:

说明:


在后面添加\d的负面外观以消除从27开始的匹配

我尝试了你的答案,发现我的答案是错误的。这是你的一个演示:@Zev,我答案中的演示文本应该是指向regex101的链接。不知怎的,我错过了它。我已编辑以更新演示链接。干杯。谢谢@Matt.G的回答。或者,只要capture所有IP(v4),然后与要排除的IP进行比较。。另外,
127.0.0.42
?@user2864740编辑了一个问题,本地主机范围内的所有IP都必须消除。问题是,我最初读取的是1000个文件,所以在csv文件中存储了近5000个IP。如果你比较所有这些IP的正则表达式匹配,时间到了对于如此快速的操作,complex.5000对于计算机来说是一个极小的数字~0时间。性能瓶颈(如果有的话)可能在其他地方,比如实际的IO读取。此外,如果没有对实际性能进行测试和测量,我几乎没有理由相信正则表达式[向后看]比regex+guard.P.S.快任何/相关速度。我不是新买的计算机有4个内核,它们都以每秒34亿次的速度“滴答”着。@user2864740是的。考虑到计算能力,5000是一个小数字。但是如果我解析的1000个文件很大(数百MB)怎么办为了刮取IP?我有html、.pp、json、xml、Readme.md等类型的文件。我需要一些高效的文件。在5000个IP中,只有大约300个IP位于127…rangne。因此,我不想与其他4000个与此“性能”问题相关的IP进行比较。你花了更多的时间写最后一条评论,而不是几十个(甚至可能数十万次)这样的检查。此外,它成为计划方案中的性能问题的可能性:大约为0。如果没有实际性能数据,甚至没有相关经验和支持此类工作的案例,尝试“优化”是没有意义的。