【问题标题】:Ignore these two numbers (starts with 127 or 0) in the first octet of the ip address through python regex通过python正则表达式忽略ip地址的第一个八位字节中的这两个数字(以127或0开头)
【发布时间】:2018-12-01 10:30:25
【问题描述】:

我有一个存储在文本文件中的 IP 列表以及一些其他数据,我试图从中仅对有效 IP 进行 grep。在这里,我有一些 IP,例如 0.0.0.0 和 localhost IP(以 127 开头......),我试图使用正则表达式来消除它们。 这是我想出的过滤 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

【问题讨论】:

  • 或者,只需捕获所有 IP(v4),然后与要排除的 IP(v4) 进行比较。另外,127.0.0.42 呢?
  • @user2864740 编辑了问题 必须消除 localhost 范围内的所有 IP。问题是,我最初是从 1000 个文件中读取的,因此我将将近 5000 个 IP 存储在一个 csv 文件中。如果您比较所有这些 IP 的正则表达式匹配,它的时间复杂度。
  • 5000 是一个很小的数字 ~ 0 次对计算机来说如此快速的操作。性能瓶颈(如果有的话)可能在其他地方,比如实际的 IO 读取。此外,如果没有测试和测量 实际 性能,我没有理由相信正则表达式 [向后看] 比正则表达式 + 警卫更快/相关。附言我的新电脑有 4 个内核,所有内核都以每秒 34 亿次的速度“滴答”。
  • @user2864740 是的。考虑到计算能力,5000 是很小的数字。但是,如果我解析的那 1000 个文件很大(数百 MB)来抓取 IP 怎么办?我有 html、.pp、json、xml、Readme.md 等类型的文件。我需要一些高效的文件。在 5000 个 IP 中,只有大约 300 个 IP 在 127...范围内。为此,我不想比较其他 4000 个 IP
  • 与这个“性能”问题无关。你花了更多的时间写最后一条评论,然后是成千上万(甚至可能是几十万)数千个这样的检查。此外,它是程序方案中 a/the 性能问题的可能性:大约 0。没有实际性能数据,甚至没有相关经验和案例支持,试图“优化”是没有意义的这样的努力。

标签: python regex python-3.x python-2.7 ip-address


【解决方案1】:

尝试正则表达式:(?<!\d)(?!0|127)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

Demo

解释:

在 \d 后面添加否定外观以消除以 27 开头的匹配项

【讨论】:

  • 我试过你的,发现我的答案是错误的。这是您的演示:regex101.com/r/CMGOHz/3
  • @Zev,我回答中的演示文本应该是 regex101 的链接。不知何故,我错过了。我已编辑以更新演示链接。干杯。
  • 感谢@Matt.G 的回答
猜你喜欢
  • 2023-01-05
  • 2020-08-04
  • 2021-08-15
  • 2018-12-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 2014-05-13
相关资源
最近更新 更多