查找并替换多个文件并添加递增编号

时间:2014-08-06 09:11:26

标签: python regex replace

我试图在计算机上的许多.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 个答案:

答案 0 :(得分:1)

Haven没有经过测试,因为我没有想到你要替换的是什么,但是你不应该在你的re.sub通话过程中像这样增加,你需要更换你的最后一行代码:

line = re.sub(r'([^\s]*)\.Separator\((.*)\)\;', r'Separator \1\_' + i + '(\1,\2);')
i += 1

在C ++中,你只需要输入i ++或++ i,然后在增量之前或之后对表达式进行求值,但在这里我不会尝试花哨的东西,python需要可读,而下一个程序员阅读你的代码可能不会猜到你做了什么。并且python中没有++运算符。

编辑:你只是在阅读你的文件,开放(文件)有默认的" r",这意味着阅读,你不会写任何东西。你需要打开(文件," w")。而不只是将re.sub()返回值存储在变量中,而是将其写入文件。

Edit2:这是我正在做的事情,还没有完成,我会在我找到如何让它发挥作用时进行编辑:

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)

根据The python documentation

,替换文本可以是仅在非重叠模式匹配时调用的函数的结果。

编辑3:我想我会停在那里,除非我收到你的回复,因为我有一些正则表达式以及其他我没有时间解决的问题。另外,我不确定文本替换的最佳实践,你应该寻找,应该有帮助。将整个事物粘合在一起(增量,纠正你的re.sub()调用,以书写模式打开,替换匹配的文本)你应该实现你想要做的事情。