我的代码中都有这样的陈述:
LogWrite (String1,
String2,
L"=======format string======",
...
);
我想将其中的每一项更改为:
LogWrite (String1,
String2,
L"format string",
...
);
我正在尝试使用Emacs函数query-replace-regexp编写执行此操作所需的正则表达式,但尚未取得多大成功。求救!
更新: 1)如果不清楚,这个问题是特定于emacs的。
2)我想匹配从Log ...结束于);
开始的整个代码块3)我使用以下reg-exp来匹配代码块:
L.*\n.*\n.*==.*;
我使用了re-builder来匹配这个正则表达式。使用\ n是因为我发现emacs会在新行停止匹配。问题是我不知道如何选择格式字符串并保存它以在替换regexp中使用它 - 因此regexp中的==。*部分。需要修改它以保存格式字符串。
答案 0 :(得分:2)
如果您的格式字符串行中没有多个(或转义)双引号,则可以
//replace
L"=+(.*)=+"
//with
L"\1"
更新:删除了懒惰的量词(感谢@tim)。确保正则表达式不是多行的;如果*
匹配新行
.
会导致非常糟糕的结果
答案 1 :(得分:1)
找出emacs正则表达式的一个很好的工具是:
M-x re-builder
文档中的简要说明:
调出
re-builder' attaches itself to the current buffer which becomes its target buffer, where all the matching is done. The active window is split so you have a view on the data while authoring the RE. If the edited expression is valid the matches in the target buffer are marked automatically with colored overlays (for non-color displays see below) giving you feedback over the extents of the matched (sub) expressions. The (non-)validity is shown only in the modeline without throwing the errors at you. If you want to know the reason why RE Builder considers it as invalid call
reb-force-update'(“\ C-c \ C-u”)时 应该揭示错误。
它内置于Emacs(自21年起)
对于Emacs正则表达式的语法,您可以阅读这些信息页面:
答案 2 :(得分:0)
/={7}(.*)={6}/\1/
这应该做。