我正在寻找一个会改变的正则表达式。像这样:
print "testcode $testvar \n";
in
printnlog("testcode $testvar \n");
我试过%s/print\s*(.\{-});/printnlog(\1);/g
,但gvim说
print\s*(.\{-});
不匹配。
我的错在哪里? 可以在'\ s'之后使用'*',因为之后的'{ - };'会阻止贪婪吗?
提前致谢。
答案 0 :(得分:8)
在vim中,您必须使用反斜杠添加(
,)
和|
,所以请尝试
:%s/print\s*\(.\{-}\);/printnlog(\1);/g
答案 1 :(得分:4)
MBO的回答很有效,但有时候我发现使用“非常神奇”的选项\v
更容易,所以我不必逃避一切;使正则表达式更具可读性。
另见:
答案 2 :(得分:0)
虽然您可以创建捕获组(就像您正在做的那样),但我认为最简单的方法是使用非常简单的正则表达式和“标记”字来分多步完成工作。例如:
:%s/print "testcode.*/printnlog(XXX&XXX);/
:%s/XXXprint //
:%s/;XXX//
在这些示例中,我使用“XXX”来表示稍后应该修剪的边界(您可以使用代码中未出现的任何内容)。 &符号(&)获取整个匹配字符串并将其插入替换字符串。
我不了解其他人,但我可以比通过捕获组更快地输入和执行这三个正则表达式。
答案 3 :(得分:0)
这是否足以满足您的需求?
%s/print\s*\("[^"]*"\)/printnlog(\1)