我需要替换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中有任何可用的功能,有人可以帮助我吗?
答案 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)