re.search无法在文件中找到正则表达式模式

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)

ayd*_*dow 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)
Run Code Online (Sandbox Code Playgroud)

*注:比较复杂但并不困难