san*_*you 5 python regex file python-3.x
我有测试文件(test.txt)如下:
`RANGE(vddout,sup)
`RANGE(vddin,sup_p)
Run Code Online (Sandbox Code Playgroud)
我想修改这个文件如下:
`RANGE(vddout,sup,tol_sup)
`RANGE(vddin,sup_p,tol_sup_p)
Run Code Online (Sandbox Code Playgroud)
这是我尝试的代码,但它无法使用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)
Run Code Online (Sandbox Code Playgroud)
正如评论中提到的,您没有编写文件。
此外,当您可以将整个文件作为字符串读取来执行操作时,您正在逐行读取每一行。这既效率低下(因为您需要执行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)
Run Code Online (Sandbox Code Playgroud)
*注:比较复杂但并不困难