gpt4 book ai didi

Python 重复捕获组

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:34 24 4
gpt4 key购买 nike

我正在尝试解析一系列 SHOW CDP NEIGHBORS DETAIL 输出,以便我可以捕获每个设备及其 IP 地址。

我遇到的问题是某些设备可能分配有多个 IP 地址,这是一个示例输出。

Device ID: RTPER1.MFN21Mb.domain.local
Entry address(es):
IP address: 200.152.51.3
IP address: 82.159.177.233
IP address: 201.152.51.140
IP address: 84.252.100.3
Platform: Cisco 2821, Capabilities: Router Switch IGMP

我写了这个正则表达式来捕获输入,根据 gskinner,它匹配所有 4 个 ip 地址,但捕获只是最后一个(正如正则表达式所预期的那样)

Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+(?:IP address: ([0-9.]+)\s+)+

所以我上网研究如何做到这一点。我尝试了这里建议的正则表达式 Capturing repeating subpatterns in Python regex但使用正则表达式模块并没有改变输出。我仍然只得到列表中的最后一个 IP 地址,其他的都没有。

按照我得到的例子

temp = regex.match(r'Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+(?:IP address: ([0-9.]+)\s+)+', file)
print temp

Temp 返回无。

如果我找到所有。我只返回最后一个 IP 地址 84.252.100.3

如果我添加多个捕获组,比如

temp = regex.findall(r'Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+(?:IP address: ([0-9.]+)\s+)?\s+(?:IP address: ([0-9.]+)\s+)?\s+(?:IP address: ([0-9.]+)\s+)?\s+(?:IP address: ([0-9.]+)\s+)?\s+(?:IP address: ([0-9.]+)\s+)?', file)
print temp

它只匹配有多个ip地址的,不匹配其他的

希望有人能提供帮助。

最佳答案

据我所知,只有 .NET 允许您循环访问量化的(重复的)捕获组。考虑这个(有限的)替代方案:

Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+(?:IP address: ([0-9.]+)\s+)(?:IP address: ([0-9.]+)\s+)?(?:IP address: ([0-9.]+)\s+)?(?:IP address: ([0-9.]+)\s+)?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

这将在 $2 中捕获 1 个 IP 地址以及最多三个 $3 , $4 , 和 $5 . (当然,我惯用地使用了 $ 表示法。)您可以添加任意多个。如果您需要所有 IP 地址都出现在一个组中, $2 ,那么您唯一的选择就是将文本包含在其中:

Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+((?:IP address: (?:[0-9.]+)\s+)+)
^ ^^ ^

关于Python 重复捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15908085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com