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

Isr*_*ael 5 regex emacs

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

我认为使用:

'(query-replace-regexp PATTERN EMPTY)

和:

'(replace-regexp PATTERN EMPTY)

但他们扔了:

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

Tho*_*mas 13

通常,您可以使用空字符串""作为您提到的两个函数中的替换来删除与给定正则表达式匹配的文本.但是,正如上面评论中提到的其他人一样,您的正则表达式有问题.

例如,如果您的缓冲区包含以下文本:

1. My todo list
1.1. Brush teeth
1.2. Floss
2. My favorite movies
2.1. Star Wars episodes 4-6
Run Code Online (Sandbox Code Playgroud)

并且你想摆脱每行开头的数字,你可以将光标放在缓冲区的开头,然后输入M-C-%(也就是说,你按下一次:ALT,CTRL,Shift,5)调用命令query-replace-regexp.您将在迷你缓冲区中询问两个参数,首先是匹配的正则表达式而不是替换字符串.因此,在我们的示例中,您可以使用以下正则表达式:

\([0-9]\.\)+\s-
Run Code Online (Sandbox Code Playgroud)

作为第一个参数,只需按ENTER键输入第二个参数,即不指定任何替换参数.这样,替换是空字符串:你替换任何与正则表达式匹配的东西.

query-replace-regexp如果你想要替换它或者你想跳过它,它会以交互方式询问你.这是"查询"部分,query-replace-regexp有助于查看您提出的正则表达式是否与您的想法相符.如果您确定这样做,可以键入!以使Emacs替换剩余的匹配而不必每次都询问.

如果你使用M-x replace-regexp而不是M-C-%Emacs将替换每场比赛,而不是在每场比赛都要求输入.

对于特殊情况,当线的某一部分与正则表达式匹配时,你想要删除整行,还有delete-matching-lines它和它的邪恶,山羊胡子穿着平行宇宙的双胞胎兄弟delete-non-matching-lines.