簡體   English   中英

用Python替換(re.sub)

[英]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.

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