在多个文件中查找替换并添加递增数字
我想在我电脑上的很多.cpp
文件中替换一个正则表达式的模式。我需要在每次替换的末尾加上一个递增的数字,所以我选择用Python来完成这个任务。
我已经写了一些代码,但还没有成功:
import os
import re
i = 0
for file in os.listdir("C:\SeparatorTest"):
if file.endswith(".cpp"):
for line in open(file):
line = re.sub(r'([^\s]*)\.Separator\((.*)\)\;', r'Separator \1\_' + i += 1 + '(\1,\2);')
我是不是漏掉了什么?
1 个回答
1
我没有测试过,因为我没想到你想替换的内容,但在你的re.sub调用中间不应该那样增加数字,你需要把最后一行代码替换成这个:
line = re.sub(r'([^\s]*)\.Separator\((.*)\)\;', r'Separator \1\_' + i + '(\1,\2);')
i += 1
在C++中,你可以直接写i++或++i,这样表达式会在增加前或增加后被计算,但在这里我建议不要用复杂的写法,Python需要保持可读性,下一个看你代码的程序员可能猜不到你做了什么。而且在Python中没有++这个操作符。
编辑:你只是读取文件,open(file)的默认模式是"r",也就是读取模式,你并没有写入任何东西。如果你想写入,就需要用open(file, "w")。而且不仅要把re.sub()的返回值存储在一个变量中,还要把它写入文件。
编辑2:这是我正在做的项目,尚未完成,我会在找到解决办法后再编辑:
import os, re
i = 0
def replacement(i):
i += 1
return r'Separator \1\_' + str(i) + '(\1,\2);'
for file in os.listdir("."):
if file.endswith(".cpp"):
for line in open(file):
re.sub(r'([^\s]*)\.Separator\((.*)\)\;', replacement(i), line)
这个想法是替换的文本可以是一个函数的结果,这个函数应该在匹配到不重叠的模式时才被调用,具体可以参考Python文档
编辑3:我想我就到这里了,除非你给我回复,因为我还有一些正则表达式和其他问题没有时间去解决。而且我对文本替换的最佳实践也不太确定,你应该去查一下,应该会有帮助。把所有的部分结合起来(增加数字、修正你的re.sub()调用、以写入模式打开文件、替换匹配的文本),你应该能实现你想做的事情。