簡體   English   中英

Python:用文件中的多個字符串替換多個字符串

[英]Python: Replace multiple strings with multiple strings in files

我正在建立一個網絡認證實驗室。 有13種設備的一些配置,但是由於我沒有與制作材料完全相同的設備,因此我必須對配置進行一些更改。

我試圖制作一個Python腳本,但是它與我需要的不完全匹配。

我有一個文件,其中包含要進行的更改:

find-this,with-with-this現在我要更改的配置主要是intarfaces,因此它看起來像這樣(我刪除了一些配置使其變得更小):

interface Serial0
description Connected to R1
frame-relay route 102 interface Serial1 201
frame-relay route 103 interface Serial2 301
frame-relay route 104 interface Serial4 401
frame-relay route 105 interface Serial5 501
frame-relay route 113 interface Serial3 311
!
interface Serial1
description Connected to R2
frame-relay route 201 interface Serial0 102
frame-relay route 203 interface Serial2 302
frame-relay route 204 interface Serial4 402
frame-relay route 205 interface Serial5 502
frame-relay route 213 interface Serial3 312
!

我要替換的地方

Serial0,Serial1/0
Serial1,Serial1/1
Serial2,Serial1/2
Serial3,Serial1/3
Serial4,Serial1/4

或像這樣:

interface Serial0/0
!
interface Serial0/0.1 point-to-point
!
interface Serial0/1
!

我要替換的地方

Serial0/0,Serial0/2/0
Serial0/1,Serial0/1/0

現在,我使用此方法逐行執行此操作:

def replace_all(text, dic):
    for i, j in dic.iteritems():
        text = re.sub("\\b"+i+"\\b", j, text)

我的問題是Serial0或Serial0 / 0第一次匹配並更改為Serial1 / 0,但是隨后被Serial1匹配,所以我得到了Serial1 / 1/0。 我已經嘗試過使用邊界(\\ b)和^和$,但是它似乎不起作用; 我也有這樣的情況,它的名字是Serial1而不是Serial1 / 0,但是它的名字是Serial1.200。

因此,它應該與我要查找的內容完全匹配,或者與我要查找的內容+一個點和一些數字完全匹配。 串口0 / 1.200

任何人都知道該怎么做,可以指出正確的方向嗎?

一種低效但有效的方法可能是通過代碼手動執行while循環(如for循環),對照單詞列表檢查position變量前面的字符串,然后替換是否存在匹配項,並添加替換單詞的長度到位置變量。 有點難看,但簡單有效。

您可以逐行處理並打破循環:

new_text=""
for line in lines:
    new_text= new_text + fix_line(line)

def fix_line(line):
     for i, j in dic.iteritems():
          new_line = re.sub("\\b"+i+"\\b", j, line)
          if new_line != line: #line changed stop loop
               return new_line
     return line #line didn't match

print(new_text)

編輯 :如果要在正則表達式上完全匹配,則應使用split

 str_list = line.split(" ")
 if len(str_list) > 4: #case the line has interface
     process(str_list[4])

 def process(str_to_match):
     if str_to_match in dic:
           return dic[str_to_match] #will get the exact match saved in the dict
     return str_to_match #not in dict dont replace

暫無
暫無

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

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