re.search找不到文件内的正则表达式模式

时间:2018-11-30 02:01:20

标签: python regex python-3.x file

我的测试文件(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)

2 个答案:

答案 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)

*注意:更复杂但并不困难