Emacs交互式正则表达式替换

时间:2012-06-21 08:38:04

标签: regex emacs replace

假设你有一些文字内容如下:

"foo" ... "bar" ... "file" ... "emacs"

并且您要做的就是替换“with”。我知道只需要进行以下替换即可:

" -> ''

但是假设您希望以交互方式和正则表达式进行,对于更复杂的情况,如何才能完成?

我更好地解释自己:我希望我能有一个命令或一系列命令以这种方式工作:

  • 编写像"\\(.*?\\)"这样的正则表达式并以交互方式查看结果(即,当您编辑正则表达式时,当前可见的匹配会突出显示,并且在您进行更改时始终会更新突出显示。)
  • 对正则表达式感到满意后,请指定替换项,例如' '\1' '
  • 以互动方式替换所有比赛

3 个答案:

答案 0 :(得分:20)

最后我发现了!!!!! 这些是要遵循的步骤:

  • M-x isearch-forward-regexp

  • 以交互方式插入正则表达式。如果您犯了错误,可以使用DEL或M-e并浏览正则表达式进行更正。

  • 然后在找到你想要的东西后立即按下M-%并替换你喜欢并开始更换。

因此,您可以以完全交互式和增量方式搜索和替换正则表达式。

答案 1 :(得分:7)

命令query-replace-regexp是否满足您的要求?在大多数Emacs安装中,它将绑定到C-M-%

由于这不符合OP的要求,建议同时查看re-builder。此功能未在Emacs手册或帮助系统中记录,只是在Emacs Lisp manual中记录。

答案 2 :(得分:7)

  • 运行M-x isearch-forward-regexpC-M-s

  • 当您开始输入正则表达式时,第一次出现将立即突出显示。尝试使用光标返回正则表达式将取消搜索,因此如果您犯了错误,应使用M-e进行编辑,进行更改,然后按Enter键继续搜索。

    < / LI>
  • 如果您对正则表达式感到满意,请按M-%,键入替换字符串(或使用向上键访问以前使用的替换字符串),然后按RET开始交互更换。

  • 对于每次出现,请按y替换一次,n跳过,!替换全部,RET退出,或{{1}查看更多选项。

  • 要重复上一次正则表达式搜索,请先输入?,然后C-M-s

完整详情位于manual page