我正在写一个文本文件,但它没有像我预期的那样正常工作。
以下是我所拥有的:
#!/usr/lib/env python
import re
file = open("address.txt","r")
content = file.read()
file.close()
content = content.split('LAN ')[1:]
dic = {}
for lan in content:
dic[int(lan[0])] = lan[1:]
def address(lan_index):
address = re.findall('address\s(.*?)\s',dic[lan_index] )
if len(address) > 0:
print 'LAN', lan_index, ":", address[0]
else:
print 'No Address Found!'
return address[0]
ad1 = str(address(1))
new_ad = ad1
var1 = 'ad1'
filedata = None
with open('address.txt', 'r') as file :
filedata = file.read()
filedata = filedata.replace(ad1 , var1)
with open('address.txt', 'w') as file:
file.write(filedata)
这是我的文字档案:
#line addresses LAN 1
address 192.168.6.6
network 192.168.6.6
我的问题是,当我想替换ad1
var1
时,它不会只替换address
,只会替换network
,并且它们具有相同的IP。
我的输出是这样的:
地址ad1
网络ad1
是否有一种有效且可行的方法来避免这种情况并得到类似的结果:
地址ad1
网络192.168.6.6
如果可能,我将非常感激。 谢谢
答案 0 :(得分:2)
您的地址都被替换,因为filedata.replace(ad1 , var1)
是贪婪的。您可以通过为其提供可选的第三个参数来限制它:filedata.replace(ad1 , var1, 1)
告诉它最多1
个替换,或者您可以扩展您的捕获组:'(address\s.*?)\s'
以包含"地址& #34;和make var1 = "address ad1"
,以便filedata.replace
只找到包含"地址"的行在他们中