PythonRegex【2】

來源:互聯網
上載者:User
接著昨天的的內容,今天直接實戰。因Regex非常強大也很複雜,本次實驗中超出上次所學範圍的部分,請自行查閱相關文檔,本教程僅協助營運工程師快速上手,如果不理解也可以當作工具直接替換使用。

回顧Telnet、SSH自動巡檢指令碼裡面的Regex:DeviceName = re.search('.*(?=#show run)',telreply).group(),telreply就是巡檢的內容,那麼開啟日誌開頭就能看見:

R1>enablePassword:R1#terminal length 0R1#show runBuilding configuration...

很顯然,這個Regex是要匹配在'#show'之前的任一字元(除分行符號),那麼當然就是R1了。

再做一個複雜點的實驗,截取多一點的配置片段,比如下面的配置,要求找到這台裝置每個介面的IP地址:

############################!interface FastEthernet0/0ip address 192.168.1.200 255.255.255.0duplex half!interface GigabitEthernet1/0no ip addressshutdownnegotiation auto!interface Serial2/0ip address 192.168.2.200 255.255.255.0!############################

把它賦值在log中:(真實環境是直接讀取log日誌)

log = ''' #這裡是三引號,之後斷行符號把上面的配置粘貼進來,之後斷行符號三引號,斷行符號。(三引號可以粘貼多行字串)。

這時查看一下log:

>>> log'\n!\ninterface FastEthernet0/0\n ip address 192.168.1.200 255.255.255.0\n duplex half\n!\ninterface GigabitEthernet1/0\n no ip address\n shutdown\n negotiation auto\n!\ninterface Serial2/0\n ip address 192.168.2.200 255.255.255.0\n!\n'>>>

可以發現字串都在一行,換行實際就是'\n',如果使用print(log),那麼顯示的效果就是上面那樣有換行的了。

還可以發現Cisco裝置的配置都是用驚嘆號(!)隔開的,每個介面的開頭都是'interface',IP地址前面都是'ip address'。所以不難想象,Regex中有'interface(.*)\n',這個是匹配了某個介面配置的首行。配置結尾是'!',所以在'!'之前的運算式需要'(?=!)'。中間配置的行數不定,能確定的是至少有一行配置,並且會有分行符號,即'(.*\n)+?)'。這裡的'+?'表示非貪婪的匹配前面的運算式(.*\n)一次或者多次。圓括弧可以達到捕獲效果,但如果想要關掉捕獲效果,在左括弧後面跟隨一個?:就可以了。這次實驗是要匹配所有字串,所以使用的是're.findall()'。不多解釋了,直接上代碼:

ljds = re.findall('interface(.*)\n((?:.*\n)+?)(?=!)',log)>>> ljds[(' FastEthernet0/0', ' ip address 192.168.1.200 255.255.255.0\n duplex half\n'), (' GigabitEthernet1/0', ' no ip address\n shutdown\n negotiation auto\n'), (' Serial2/0', ' ip address 192.168.2.200 255.255.255.0\n')]

結果是把每個介面的配置分成了介面名+配置的元組,嵌套在了列表裡。

接下來寫個For迴圈把介面和IP再次抓出來:

運行效果:

實驗完成!達到了擷取每個介面IP地址的目的。

現在學會了這種方法,將來可以用它去監控裝置的配置或狀態,比如本來介面狀態是'UP',如果變成'DOWN'了就發郵件通知你。

以上就是PythonRegex【2】 的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.