python - Python - re.DOTALL 导致“无”输出
问题描述
我正在尝试从以下代码中获取 2 个 ipv6 地址:
import re
from pprint import pprint
with open('show_ipv6_intf.txt') as f:
show_ipv6_int = f.read()
match = re.search(r'^\s+(\S+)\s\[VALID\]\s+(\S+).*', show_ipv6_int,flags=re.M)
ipv6_1 = match.group(1)
ipv6_2 = match.group(2)
ipv6_list = []
ipv6_list.append(ipv6_1)
ipv6_list.append(ipv6_2)
print(ipv6_list)
为了广度,
这是正在使用的文件:
Ethernet2/4, Interface status: protocol-up/link-up/admin-up, iod: 40
IPv6 address:
2001:11:2233::a1/24 [VALID]
2001:cc11:22bb:0:2ec2:60ff:fe4f:feb2/64
IPv6 subnet: 2001::/24
IPv6 link-local address: fe80::2ec2:60ff:fe4f:feb2 (default) [VALID]
IPv6 virtual addresses configured: none
IPv6 multicast routing: disabled
IPv6 report link local: disabled
IPv6 Forwarding feature: disabled
IPv6 multicast groups locally joined:
ff02::1:ff4f:feb2 ff02::2 ff02::1 ff02::1:ff00:a1
ff02::1:ff4f:feb2 ff02::1:ff00:0
IPv6 multicast (S,G) entries joined: none
IPv6 MTU: 1500 (using link MTU)
IPv6 unicast reverse path forwarding: none
IPv6 load sharing: none
IPv6 interface statistics last reset: never
IPv6 interface RP-traffic statistics: (forwarded/originated/consumed)
Unicast packets: 0/0/0
Unicast bytes: 0/0/0
Multicast packets: 0/18/0
Multicast bytes: 0/2076/0
如果我使用标志“re.M”,我会检索到所需的结果,但是当我使用“re.DOTALL”时,我会产生“无”布尔值。见下文:
与 re.M
C:\Users\Kenyone\.PyCharm2019.3\config\scratches>python week4lesson6.py ['2001:11:2233::a1/24', '2001:cc11:22bb:0:2ec2:60ff:fe4f:feb2/64']
与 re.DOTALL
C:\Users\Kenyone\.PyCharm2019.3\config\scratches>python week4lesson6.py Traceback (most recent call last): File "week4lesson6.py", line 7, in <module> ipv6_1 = match.group(1) AttributeError: 'NoneType' object has no attribute 'group'
解决方案
您希望从 re.DOTALL 获得什么?它改变了.
你的正则表达式模式中的行为,但你只有一个,而且没有必要。由于它后面是*
,它可以匹配零次。您可以在最后没有那个点星的情况下重写模式并获得相同的行为。
r'^\s+(\S+)\s\[VALID\]\s+(\S+)'
应该是相同的并且没有点。
re.M 是必要的,因为你有^
并且希望它在一行的开头匹配,而不仅仅是在整个字符串的开头。
您可以同时使用这两个标志并且它会起作用,但是 re.DOTALL 在这里没有做任何有用的事情。
推荐阅读
- java - 如何在 jpa 查询中加入具有多对多关系的两个实体
- css - CSS3 动画在 Firefox 中效果不佳(过渡不流畅)
- php - 在我的 WordPress 自定义插件“函数名称必须是字符串”中,我正在使用 $get_the_author_meta()
- java - 获取当前处理块的先前块值 - 弹簧批处理
- javascript - 如何解析无序列表
- 是兄弟姐妹
- flutter - 如何在颤动中显示/隐藏密码?
- java - 为什么javers快照表序列乘以100
- pandas - AWS Athena 错误解释时间戳列
- python - 更改 SQLALCHEMY_DATABASE_URI 以使用端口 3307
- python - 有没有办法编写只返回第 n 个元素的 css 选择器?