簡體   English   中英

跨越多行的python正則表達式

[英]python regular expression across multiple lines

我正在使用python和pexpect從一些cisco設備收集一些信息,並且在REs上取得了很多成功來提取討厭的小項目。 我擔心我會碰到這個問題。 有些交換機堆疊在一起,我已在腳本中識別出這一點並使用單獨的例程來解析數據。 如果開關堆疊,您會看到以下內容(從示波器輸出中提取)

Top Assembly Part Number        : 800-25858-06
Top Assembly Revision Number    : A0
Version ID                      : V08
CLEI Code Number                : COMDE10BRA
Hardware Board Revision Number  : 0x01


Switch   Ports  Model              SW Version              SW Image
------   -----  -----              ----------              ----------
*    1   52     WS-C3750-48P       12.2(35)SE5             C3750-IPBASE-M  
     2   52     WS-C3750-48P       12.2(35)SE5             C3750-IPBASE-M
     3   52     WS-C3750-48P       12.2(35)SE5             C3750-IPBASE-M
     4   52     WS-C3750-48P       12.2(35)SE5             C3750-IPBASE-M


Switch 02 
---------
Switch Uptime                   : 11 weeks, 2 days, 16 hours, 27 minutes
Base ethernet MAC Address       : 00:26:52:96:2A:80
Motherboard assembly number     : 73-9675-15

當我遇到這個時,我需要在4的表中提取每個的開關編號和模型,(sw可以忽略,但可以有1到9個開關)這是多線的東西讓我像我一樣其余的都沒問題。 有什么想法嗎?

好的道歉。 我的正則表達式只是開始查看最后一組 - 直到..然后我無法工作到哪里去!
- {10] \\ S- {10}(。+)切換

模型會改變,開關的數量會改變,我需要捕獲這個例子中的4行

*    1   52     WS-C3750-48P       12.2(35)SE5             C3750-IPBASE-M  
     2   52     WS-C3750-48P       12.2(35)SE5             C3750-IPBASE-M
     3   52     WS-C3750-48P       12.2(35)SE5             C3750-IPBASE-M
     4   52     WS-C3750-48P       12.2(35)SE5             C3750-IPBASE-M

但每個開關可能是一個不同的型號,可能在1到9之間。對於這個例子,理想情況下我想得到

*,1,WS-C3750-48P
,2,WS-C3750-48P
,3,WS-C3750-48P
,4,WS-C3750-48P  

(星號表示主人)
但獲得這些線條會讓我走上正軌

. 匹配任何字符,包括換行符,在選項中用re.DOTALL編譯你的RE(記住,如果你有多個選項,在它們之間使用| ,位或運算符,以便將它們組合起來)。

在這種情況下,我不確定你確實需要這個 - 為什么不喜歡這樣的東西

re.findall(r'(\d+)\s+\d+\s+(WS-\S+)')

例如,假設您識別“模型”的方式是它以WS-開頭? findall一個結果和下一個結果之間會有換行的事實在這里不是問題。 你能准確解釋一下你如何識別“模型”以及為什么“多線”是一個問題嗎? 也許你希望re.MULTILINE在每個行首開始進行^匹配,通過引用行的開頭來獲取數據......?

x="""Top Assembly Part Number        : 800-25858-06
Top Assembly Revision Number    : A0
Version ID                      : V08
CLEI Code Number                : COMDE10BRA
Hardware Board Revision Number  : 0x01


Switch   Ports  Model              SW Version              SW Image
------   -----  -----              ----------              ----------
*    1   52     WS-C3750-48P       12.2(35)SE5             C3750-IPBASE-M
     2   52     WS-C3750-48P       12.2(35)SE5             C3750-IPBASE-M
     3   52     WS-C3750-48P       12.2(35)SE5             C3750-IPBASE-M
     4   52     WS-C3750-48P       12.2(35)SE5             C3750-IPBASE-M


Switch 02
---------
Switch Uptime                   : 11 weeks, 2 days, 16 hours, 27 minutes
Base ethernet MAC Address       : 00:26:52:96:2A:80
Motherboard assembly number     : 73-9675-15"""

>>> import re
>>> re.findall("^\*?\s*(\d)\s*\d+\s*([A-Z\d-]+)",x,re.MULTILINE)
[('1', 'WS-C3750-48P'), ('2', 'WS-C3750-48P'), ('3', 'WS-C3750-48P'), ('4', 'WS-C3750-48P')]

更新 :因為OP編輯了問題,並感謝Tom指出+

>>> re.findall("^(\*?)\s+(\d)\s+\d+\s+([A-Z\d-]+)",x,re.MULTILINE)
[('*', '1', 'WS-C3750-48P'), ('', '2', 'WS-C3750-48P'), ('', '3', 'WS-C3750-48P'), ('', '4', 'WS-C3750-48P')]
>>>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM