需要在一行中用不同的值替换ip地址

时间:2014-06-02 07:40:15

标签: python automation

我需要替换ip ospf db area <IP4ADDR> ex <IP4ADDR> rtr <IP4ADDR>

ip ospf db area 0.0.0.1 ex 0.0.0.0 rtr 222.0.0.1

我试过跟随,但它没有满足要求。

>>> str = "ip ospf db area <IP4ADDR> ex <IP4ADDR> rtr <IP4ADDR>"
>>> newstr = str.replace("<IP4ADDR>","0.0.0.1")
>>> newstr
'ip ospf db area 0.0.0.1 ex 0.0.0.1 rtr 0.0.0.1'

对于期望的结果,所有3个IP地址将被替换为不同的值。如果python中有任何可用的功能,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

您可以将函数传递给每次都返回不同替换字符串的re.sub。例如:

import re

s = "ip opf db area <IP4ADDR> ex <IP4ADDR> rtr <IP4ADDR>"
replacements = iter(['0.0.0.1', '0.0.0.0', '222.0.0.1'])
newstr = re.sub(r'<IP4ADDR>', lambda m: next(replacements), s)

答案 1 :(得分:2)

您可以传递可选参数count。根据Python Docs:

  

...如果给出了可选参数count,则只替换第一次计数。

所以你可以进行链式调用(这会起作用,因为replace()会返回修改过的字符串):

new_str = some_str.replace("<IP4ADDR>", "0.0.0.1", 1)\
    .replace("<IP4ADDR>", "0.0.0.0", 1)\
    .replace("<IP4ADDR>", "222.0.0.1", 1)

注意:这几乎与:

相同
new_str = some_str.replace("<IP4ADDR>", "0.0.0.1", 1)
new_str = new_str.replace("<IP4ADDR>", "0.0.0.0", 1)
new_str = new_str.replace("<IP4ADDR>", "222.0.0.1", 1)