检索在fi中找不到正则表达式模式

2024-05-16 03:40:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有测试文件(测试.txt)具体如下:

`RANGE(vddout,sup)

`RANGE(vddin,sup_p) 

我想修改这个文件如下:

`RANGE(vddout,sup,tol_sup)

`RANGE(vddin,sup_p,tol_sup_p)

下面是我尝试过的代码,但它无法找到并使用替换模式检索. 你能指出代码中的漏洞在哪里吗?你知道吗

 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)

Tags: 文件代码retxtformatline模式range
2条回答

如注释中所述,您没有编写该文件。你知道吗

此外,当您可以将整个文件作为字符串读取以执行操作时,您正在逐个读取每一行。这既低效(因为您需要多次执行re.sub),又更复杂的*代码(因为您需要创建一个新字符串来写入文件)。你知道吗

最后,您将执行re.matchre.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)

*注:更复杂但不难

这应该管用。(您不必先搜索然后替换。您可以直接尝试替换。它只在第一个匹配时替换)

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

相关问题 更多 >