我有一根绳子
output = '''Gateway of last resort is not set
10.0.1.0/8 is variably subnetted, 4 subnets, 2 masks
C 10.1.0.0/24 is directly connected, Ethernet1/0
L 10.1.0.1/32 is directly connected, Ethernet0/0
C 10.2.0.0/24 is directly connected, Ethernet0/1
L 19.18.2.1/32 is directly connected, Serial2/1
O 19.18.3.0/20 [110/128] via 19.18.2.2, 00:00:50, Serial1/1
[110/128] via 19.18.1.2, 00:00:50, Serial1/0
O 12.18.3.1/20 [110/128] via 19.18.2.2, 00:00:50, Serial1/1
[110/128] via 19.18.1.2, 00:00:50, Serial1/0
O 12.18.1.0/20 [110/128] via 19.18.2.2, 00:00:50, Serial0/1
[110/128] via 19.18.1.2, 00:00:50, Serial0/0'''
从这个字符串中,我匹配O
,并使用以下命令打印完整的行:
regex = re.findall("O\s+(?P<O>\w+.\w+.\w+.\w+.*)", output, re.M)
它给我的输出是:
['19.18.3.0/20 [110/128] via 19.18.2.2, 00:00:50, Serial1/1', '12.18.3.1/20 [110/128] via 19.18.2.2, 00:00:50, Serial1/1', '12.18.1.0/20 [110/128] via 19.18.2.2, 00:00:50, Serial0/1']
但是我想把这些行和上面的输出一起打印出来。你知道吗
[110/128] via 19.18.1.2, 00:00:50, Serial1/0, [110/128] via 19.18.1.2, 00:00:50, Serial1/0, [110/128] via 19.18.1.2, 00:00:50, Serial0/0
试试这个:
我添加了
(?s)
来添加s
标志来匹配空白。你知道吗您可以选择匹配在图案后以空格开头的可选行:
见this regex demo
更新的模式详细信息:
(?:[\r\n]+[^\S\r\n]+.*)?
是一个可选的非捕获组((?:...)?
),它匹配[\r\n]+
-一个或多个CR/LF符号(要仅匹配一个,请使用(?:\r?\n|\r|\n)
)[^\S\r\n]+
-1个或多个非空格和CR/LFs以外的符号(因此,它只匹配水平空格).*
-行的其余部分(.
在默认情况下不匹配没有DOTALL模式的换行符)。你知道吗此外,我建议转义
.
以匹配IP地址内的文字点,并将\w
替换为\d
以仅匹配数字。你知道吗如果第一个
O
出现在一行的开头,为了安全起见,在它前面加上^
。你知道吗相关问题 更多 >
编程相关推荐