Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to delete regex match text in emacs?

Tags:

regex

emacs

How can I delete some text that match with a regex in emacs?

I suppose that using:

'(query-replace-regexp PATTERN EMPTY)

and:

'(replace-regexp PATTERN EMPTY)

but they throw:

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

like image 644
Israel Avatar asked Jan 16 '11 17:01

Israel


1 Answers

In general, you can delete text that matches a given regexp by using the empty string "" as the replacement in the two functions you mention. However, as others mentioned in the comments above, your regular expression is faulty.

For instance, if your buffer contains the following text:

1. My todo list
1.1. Brush teeth
1.2. Floss
2. My favorite movies
2.1. Star Wars episodes 4-6

and you would like to get rid of the numbers at the beginning of each line, you could place the cursor at the beginning of the buffer and then type M-C-% (that is, you press at a time: ALT, CTRL, Shift, 5) to invoke the command query-replace-regexp. You'll get asked two parameters in the minibuffer, first the regexp to match than the replacement string. So, in our example, you could use the following regexp:

\([0-9]\.\)+\s-

as the first parameter, and simply hit ENTER for the second parameter, i.e., don't specify anything as the replacement. That way, the replacement is the empty string: you replace what ever matches the regexp with nothing.

query-replace-regexp will ask you interactively for every match if you want to replace it or if you want to skip it. This is the "query"-part in query-replace-regexp and it is helpful to see if the regexp you came up with actually matches what you thought it does. If you're sure it does, you can type ! to make Emacs replace the remaining matches without asking every time.

If you use M-x replace-regexp instead of M-C-% Emacs will replace every match without asking for input at every match.

For the special case that you'd like to delete whole lines when a certain part of the line matches a regexp, there's also delete-matching-lines and its evil, goatee-wearing twin brother from a parallel universe delete-non-matching-lines.

like image 197
Thomas Avatar answered Sep 28 '22 19:09

Thomas