2017-05-24 41 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:是'[]'更好,我只是不想混淆這個問題。 –

相關問題