Emacs: как заменить строку с помощью регулярного выражения? - PullRequest
12 голосов
/ 05 января 2010

предположим, у меня есть следующее в текстовом файле (или буфере dired), открытом в emacs: file_01.txt file_02.txt ... file_99.txt

Я хочу запросить-заменить или заменить файлы на 01_file.txt и т. Д.

Я хочу использовать query-replace-regexp или replace-regexp, но не знаю, что вставить. Часть поиска, которую я вставил в "file_ ..", но ".." читаются как точки в строка замены. Я начинаю изучать регулярные выражения и не знаю, как это сделать. Пожалуйста, помогите, спасибо.

Ответы [ 2 ]

24 голосов
/ 05 января 2010

M-x replace-regexp вызывает функцию для замены регулярными выражениями.

Для Заменить регулярное выражение введите: \(file\)_\([0-9]+\)

Это создаст две группы, одну, которая соответствует части 'file', и одну, которая соответствует номеру. Скобки \( ... \) необходимы для последующего сопоставления в строке замены.

Для Заменить на , ввести: \2_\1

При этом вставляется второе совпадение из строки поиска (числовая часть), добавляется _ (подчеркивание), а затем добавляется первое совпадение из строки поиска («файл»).

Для получения дополнительной информации о регулярных выражениях Emacs см. Синтаксис регулярных выражений и Замените регулярные выражения .

Как только вы освоите основы регулярных выражений, вы можете попробовать инструмент Emacs ReBuilder с M-x re-builder, который позволяет интерактивно создавать регулярные выражения.

1 голос
/ 16 марта 2015

Я пытаюсь воспроизвести этот пример в учебных целях.

У меня есть буфер с file_01.txt file_02.txt file ...

С re-builder выражение \(file\)_\([0-9]+\) не работает, но необходимо удвоить экранирование, например \\(file\\)_\\([0-9]+\\).

Что касается подстановки, я попробовал то, что написано выше, но безрезультатно.

Следующие команды

M-x replace-regexp \(file\)_\([0-9]+\) или \\(file\\)_\\([0-9]+\\)

заменено на

\2_\1 или \\2_\\1

всегда приводит к Replaced 0 occurences. То есть независимо от того, является ли \ перед круглыми скобками одинарными или удвоенными.

Понятно, что мне здесь не хватает чего-то очевидного. Не могли бы вы объяснить?

Я нахожусь на GNU Emacs 24.3.1 (x86_64-pc-linux-gnu, GTK + версия 3.10.7)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...