2017-05-24 44 views
0

的Python 3.6.0分裂()上的一个字符或另一

我有解析来自Cisco交换机和路由器输出的程序。

我得到的程序中,我从'sh ip int brief' 命令返回输出的一个点。

我把它放在一个列表中,所以我可以拆分'>'字符并提取主机名。

它完美的作品。相关的代码片断:

ssh_channel.send("show ip int brief | exc down" + "\n") 
    # ssh_channel.send("show ip int brief" + "\n") 
    time.sleep(0.6) 
    outp = ssh_channel.recv(5000) 
    mystring = outp.decode("utf-8") 
    ipbrieflist = mystring.splitlines() 
    hostnamelist = ipbrieflist[1].split('>') 
    hostname = hostnamelist[0] 

如果路由器是“启用”模式的命令提示具有主机名之后的“#”字符。

如果我改变我的程序分裂的“#”字符:

hostnamelist = ipbrieflist[1].split('#') 

它仍然完美。

我需要程序处理输出是否具有'>'字符或'ipbrieflist'中的'#'字符。

我发现了几个有效的参考文献来说明如何处理这个问题。例如:

import re 
text = 'The quick brown\nfox jumps*over the lazy dog.' 
print(re.split('; |, |\*|\n',text)) 

上面的代码完美地工作。

然而,当我修改我的代码如下:

hostnamelist = ipbrieflist[1].split('> |#') 

它不工作。由'不行'我的意思是它不分裂任何一个字符。根本没有分裂。

以下调试是从PyCharm:

ipbrieflist = mystring.splitlines()ipbrieflist = {}列表:[ '末端长度为0',“RTR-1841>显示IP INT简要|删除','接口'] IP地址好吗?方法状态协议','FastEthernet0/1 192.168.1.204是NVRAM up up','Loopback0 172.17.0.1 YES NVRAM up up','','rtr-1841>'] hostnamelist = ipbrieflist [1] .split(' > |#')hostnamelist = {list}:['rtr-1841> show ip int brief | exc down'] hostname = {str}'rtr-1841> show ip int brief |删除'

正如你所看到的,hostname变量仍然包含'show ip int brief |删除“附加到它。

如果主机名后跟'#'字符,我会得到相同的确切行为。

我在做什么错?

谢谢。

+4

呃,'re.split' ='str.split'。 –

回答

1

取而代之的是:

ipbrieflist[1].split('> |#') 

你要这个!

re.split('>|#', ipbrieflist[1]) 
+0

这工作 - 但 - PyCharm给了我一个警告,说使用一个不同的语法,它说它快得多:hostnamelist = re.split('[>#]',ipbrieflist [1])这也适用。 – MarkS

+0

@MarkS:是'[]'更好,我只是不想混淆这个问题。 –

相关问题