Python:将多个字符串替换为文件中的多个字符串

罗尼

我正在建立一个网络认证实验室。有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

任何人都知道该怎么做,并可以指出正确的方向吗?

Foo Bar用户

您可以逐行处理并打破循环:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

替换多个文件中的多个字符串

来自分类Dev

将文件中特定位置的单个字符串替换为多个新字符串

来自分类Dev

替换python中的多个字符串

来自分类Dev

如何替换字符串中的多个字符?

来自分类Dev

替换字符串中的多个字符

来自分类Dev

使用Python将字符串中的字符转换为多个字符

来自分类Dev

在多个文件中搜索多个字符串

来自分类Dev

删除文件中的多个字符串/字符

来自分类Dev

删除文件中的多个字符串/字符

来自分类Dev

在Python列表中查找并替换为多个字符串值

来自分类Dev

在C#中的字符串中将多个字符替换为多个值

来自分类Dev

在C#中将多个字符替换为字符串中的多个值

来自分类Dev

PostgreSQL中的多个字符串替换

来自分类Dev

在python3中的文件中替换多个字符串

来自分类Dev

Windows命令行-替换单个字符串中的多个字符

来自分类Dev

重击字符串将多个字符替换为一个

来自分类Dev

如何使用python将json中的多个字符串数组转换为csv?

来自分类Dev

grep在文件中搜索多个字符串

来自分类Dev

grep在文件中搜索多个字符串

来自分类Dev

用多个字符替换字符串

来自分类Dev

用多个字符替换字符串

来自分类Dev

用多个字符替换字符串

来自分类Dev

python-单词中的多个字符串

来自分类Dev

python-单词中的多个字符串

来自分类Dev

Python中的多个字符串匹配

来自分类Dev

python-单词中的多个字符串

来自分类Dev

Python 中的多个字符串输入

来自分类Dev

用字典python中的值替换字符串中的多个字符

来自分类Dev

如何使用 PowerShell 替换正确替换给定文件中的多个字符串