我试图在计算机上的许多.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);')
我错过了什么吗?
答案 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)
,替换文本可以是仅在非重叠模式匹配时调用的函数的结果。
编辑3:我想我会停在那里,除非我收到你的回复,因为我有一些正则表达式以及其他我没有时间解决的问题。另外,我不确定文本替换的最佳实践,你应该寻找,应该有帮助。将整个事物粘合在一起(增量,纠正你的re.sub()调用,以书写模式打开,替换匹配的文本)你应该实现你想要做的事情。