有没有更好的方法在Emacs中进行正则表达式搜索和删除?

时间:2014-05-07 20:01:01

标签: regex search emacs replace

在阅读emacs帮助和emacs wiki时,我没有找到一种明显的方法来搜索正则表达式,然后只是删除它找到的所有匹配文本。我原本以为我可以使用正则表达式搜索和替换功能M-x query-replace-regexp,但无法弄清楚如何用空字符串替换我的匹配。点击返回空字符串就会退出。增量reg expr搜索(C-M-s)突出显示的字段不遵循与标记的文本块相同的规则。否则我会简单地剪掉它(C-w)。

请考虑以下情形。我想从一个包含3个或更多零的数字列表中删除尾随零。

0.075000
0.050000
0.10000
0.075000

所以这就是我解决它的方式。

F3                - begin keyboard macro
C-M-s for 000*    - forward regexpr search
                    match the trailing zeros find the first match
C-<SPC>           - mark the position at the end of the match (after the last 0)
C-M-r for [1-9]   - reverse regexpr search
                    match the reverse non-zero digit, mark is now on the non-zero digit
C-f               - move mark forward one space
C-w               - cut/kill the text
F4                - end keyboard macro, run until list is processed

当然有更好的方法可以做到这一点。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

使用replace-regexp来做到这一点。从具有3个或更多0的数字中删除尾随0:

M-x replace-regexp <RET>000+<RET><RET>

答案 1 :(得分:1)

replace-regexp

M-x replace-regexp
Replace regexp: $.*foo
Replace regexp $.*foo with:

您甚至可以创建自己的功能,例如kill-regexp

在暂存缓冲区(或其他缓冲区)中写

(defun kill-regexp (regexp)
  (interactive "sRegular expression to kill: ")
  (replace-regexp regexp "")
)

确保光标位于函数的某个位置,然后评估defun:

`M-x eval-defun`

(interactive ...)表示您可以以交互方式调用它。前导s表示regexp参数是一个字符串。跟随它的文本将在提示符(迷你缓冲区)

中显示