[英]Substitution (re.sub) in Python
親愛的,我來自TCL背景,是Python自動化的初學者。 我試圖閱讀有關python中正則表達式的用法,但與TCL處事方式相比,並沒有發現它有所不同。
我遇到一個問題,其中我有一個需要解析的表輸出,但是在此之前我需要刪除/替換一些我不解析的文本。
output="""
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
S - Switch, H - Host, I - IGMP, r - Repeater
Device ID Local Intrfce Holdtme Capability Platform Port ID
R4 Ser 1/0 139 R S I 3725 Ser 1/0
ESW1 Fas 0/1 149 S I 3725 Fas 0/1
"""
我需要從第一行中刪除所有文本,直到它與Repeater匹配並用whitepsace代替它。
我以前在tcl中做到的方式就是這樣。
regsub -all {^.*Repeater} $output {} newoutput
我正在嘗試使用python中的以下代碼,但它沒有幫助我。
output=output.strip(' \t\n\s')
sub_output=re.sub('.*Repeater',' ',output)
需要幫助。 另外,是否有任何文檔解釋了Python正則表達式中標志的用法
您的問題陳述尚不清楚,但我將假設您正在嘗試從此網絡設備的輸出中提取“肉”。
首先,我們可以使用str.splitlines()
輕松遍歷輸出的每一行。
通常,我們可以只str.split()
每一行進行str.split()
來獲取每個空格分隔的項目。 但是,您的某些信息本身包含空格(例如Ser 1/0
)。 因此,相反,我們將使用re.split()
並指示我們要在至少兩個空格上進行拆分。
import re
def parse_table(output):
found_header = False
for line in output.splitlines():
if line.startswith('Device ID'):
found_header = True
continue
if not found_header:
continue
yield re.split(' {2,}', line)
sample_output="""
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
S - Switch, H - Host, I - IGMP, r - Repeater
Device ID Local Intrfce Holdtme Capability Platform Port ID
R4 Ser 1/0 139 R S I 3725 Ser 1/0
ESW1 Fas 0/1 149 S I 3725 Fas 0/1
"""
from pprint import pprint
pprint(list(parse_table(sample_output)))
輸出:
[['R4', 'Ser 1/0', '139', 'R S I', '3725', 'Ser 1/0'],
['ESW1', 'Fas 0/1', '149', 'S I', '3725', 'Fas 0/1']]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.