如何在emacs中删除一些与正则表达式匹配的文本?
我认为使用:
'(query-replace-regexp PATTERN EMPTY)
和
'(replace-regexp PATTERN EMPTY)
但是他们扔了:
perform-replace: Invalid regexp: "Premature end of regular expression".
答案 0 :(得分:13)
通常,您可以使用空字符串""
作为您提及的两个函数中的替换,删除与给定正则表达式匹配的文本。但是,正如上面评论中提到的其他人一样,你的正则表达式有问题。
例如,如果您的缓冲区包含以下文本:
1. My todo list
1.1. Brush teeth
1.2. Floss
2. My favorite movies
2.1. Star Wars episodes 4-6
并且您希望摆脱每行开头的数字,您可以将光标放在缓冲区的开头,然后键入M-C-%
(也就是说,您按下一次:ALT ,CTRL,Shift,5)调用命令query-replace-regexp
。您将在迷你缓冲区中询问两个参数,首先是匹配的正则表达式而不是替换字符串。
因此,在我们的示例中,您可以使用以下正则表达式:
\([0-9]\.\)+\s-
作为第一个参数,只需按ENTER键输入第二个参数,即不指定任何替换参数。这样,替换是空字符串:替换与正则表达式匹配的东西。
如果您想要替换它,或者如果您想跳过它, query-replace-regexp
会以交互方式询问您。这是query-replace-regexp
中的“查询”部分,看看你想出的正则表达式是否与你的想法相符很有帮助。如果您确定这样做,可以键入!
以使Emacs替换剩余的匹配而不必每次都询问。
如果您使用M-x replace-regexp
代替M-C-%
,Emacs将替换每场比赛,而不会在每场比赛中要求输入。
对于特殊情况,当线的某一部分与正则表达式匹配时,你想要删除整行,还有delete-matching-lines
及其邪恶的,穿着山羊胡子的孪生兄弟来自平行宇宙{{1 }}