替换(反转)代码基于中间字母

时间:2018-04-06 09:27:50

标签: c++ replace

目前我必须将数千个代码转换为另一种代码格式。

Options.Autoskip = fileLogger->write("AutoSkip");

这个

fileLogger->write("AutoSkip") = Options.Autoskip;

基本上我必须根据中间" ="反转代码。信,但我不知道我应该使用什么/我该怎么做才能达到这个结果。我试过Notepad ++,但似乎它不支持这种"复杂的"替换工程。

如果有任何想法/计划来实现这一结果,请告诉我。

2 个答案:

答案 0 :(得分:0)

如果您确定每行只有一个=,那么正则表达式捕获组可以为您做到这一点。

例如,您可以在Notepad ++中使用Replace...(Ctrl + H)(以及可能支持正则表达式的其他几个编辑器)执行此操作:

找到:^(.*?) = (.*?);$
替换为:\2 = \1;

^匹配行开头。 (.*?)非贪婪地匹配任何内容并将其放入捕获组(尽管如此,你可能会贪婪地匹配)。 $与行结束匹配。

\1是第一个捕获组(左侧),\2是第二个捕获组(右侧)。将它们切换到替换和tada!

答案 1 :(得分:0)

使用Vim:

something else;
something else;
Options.Autoskip = fileLogger->write("AutoSkip");
Options.Hollowlens = fileLogger->write("HollowLens");
something else;
Options.Fluxcapactor = fileLogger->write("FluxCapactor");
something else;
Options.Answer = fileLogger->write("Answer");

输入Ex命令:

:%s/\v(Options\.\w+)(\s*\=\s*)(fileLogger-\>write\(".{-}"\));/\3\2\1;/g

结果:

something else;
something else;
fileLogger->write("AutoSkip") = Options.Autoskip;
fileLogger->write("HollowLens") = Options.Hollowlens;
something else;
fileLogger->write("FluxCapactor") = Options.Fluxcapactor;
something else;
fileLogger->write("Answer") = Options.Answer;

使用sed:

sed -i 's/\(Options\.\w\+\)\(\s*=\s*\)\(fileLogger->write(".*\?")\);/\3\2\1;/' src/*.cpp