如何在emacs中删除正则表达式匹配文本?

时间:2011-01-16 17:11:09

标签: regex emacs

如何在emacs中删除一些与正则表达式匹配的文本?

我认为使用:

'(query-replace-regexp PATTERN EMPTY)

'(replace-regexp PATTERN EMPTY)

但是他们扔了:

perform-replace: Invalid regexp: "Premature end of regular expression".

1 个答案:

答案 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 }}