2011-10-18 18 views
2

所以我试图搜索某个字符串,例如可能是: process.control.timeout = 30,但30可能是任何东西。我试过这个:搜索包含一些文本的行,替换完整的行python

for line in process: 
    line = line.replace("process.control.timeout", "process.control.timeout=900") 
    outFile.write(line) 

但是这会使我回到process.control.timeout = 900 = 30。我有一种感觉,我需要使用通配符的正则表达式?但我对python很陌生。

+0

有一个更简单的方法来处理幻数:使用名称定义它们一次,并在需要该数字的任何地方使用该名称。决定更改号码?更改一行代码。 –

回答

4

没有正则表达式:

for line in process: 
    if "process.control.timeout" in line: 
     # You need to include a newline if you're replacing the whole line 
     line = "process.control.timeout=900\n" 
    outFile.write(line) 

outFile.writelines("process.control.timeout=900\n" 
         if "process.control.timeout" in line else line 
         for line in process) 

如果你匹配的文本是在该行的开头,使用line.startswith("process.control.timeout")代替"process.control.timeout" in line

+0

完美!使用第一个,效果很好。谢谢 – Danny

1

你是对的,正则表达式是要走的路。

import re 
pattern = re.compile(r"process\.control\.timeout=\d+") 
for line in process: 
    line = pattern.sub("process.control.timeout=900", line) 
    outFile.write(line) 
0

这可能是你想要什么(=后匹配=和数字是可选的)。当您在循环中搜索和替换时,分别编译正则表达式会比直接使用re.sub更有效。

import re 

pattern = re.compile(r'process\.control\.timeout(=\d+)?') 

for line in process: 
    pattern.sub('process.control.timeout=900', line) 
相关问题