我的测试文件(test.txt)如下:
`RANGE(vddout,sup)
`RANGE(vddin,sup_p)
我要如下修改该文件:
`RANGE(vddout,sup,tol_sup)
`RANGE(vddin,sup_p,tol_sup_p)
这是我尝试的代码,但无法找到,无法使用re.search替换模式。您能否指出代码的缺陷在哪里?
with open("test.txt", 'r+') as file :
for line in file:
print("line={}".format(line))
findPattern=re.search(r'(`RANGE\(\w+,(\w+))\)',line)
if findPattern:
print("findPattern={}".format(findPattern))
line=re.sub(r'(`RANGE\(\w+,(\w+))\)',r'\1,tol_\2',line)
答案 0 :(得分:2)
这应该有效。 (您不必先搜索然后替换。您可以直接尝试替换。仅当匹配在第一位时才替换)
import re
with open("test.txt", 'r+') as file :
for line in file:
print(line)
print(re.sub(r'`RANGE\((\w+),(\w+)\)', r'`RANGE(\1,\2,tol_\2)`', line))
答案 1 :(得分:2)
如评论中所述,您不是在写文件。
此外,当您可能只是以字符串形式读取整个文件以执行操作时,便正在逐行读取每一行。这既效率低下(因为您需要多次执行re.sub
),而且代码编写起来更复杂*(因为您需要创建一个新的字符串以写入文件)。
最后,您正在执行re.match
和 re.sub
。这是不必要的,因为re.sub
如果没有匹配项,将什么也不做;您不需要先检查。
In [188]: with open('test.txt', 'r+') as f:
...: data = f.read()
...: updated = re.sub(r'(`RANGE\(\w+,(\w+))', r'\1,tol_\2', data)
...: f.seek(0) # Start writing at the beginning of the file
...: f.write(updated)
*注意:更复杂但并不困难