在阅读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
当然有更好的方法可以做到这一点。有什么想法吗?
答案 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
参数是一个字符串。跟随它的文本将在提示符(迷你缓冲区)