Emacs: регулярное выражение, заменяющее регистр - PullRequest
46 голосов
/ 24 марта 2009

Время от времени я хочу заменить все экземпляры значений, например:

<BarFoo>

с

<barfoo>

т.е. сделать регулярное выражение, заменяющее все вещи в угловых скобках его строчным эквивалентом.

У кого-нибудь есть хороший фрагмент Lisp, который делает это? Можно с уверенностью предположить, что мы имеем дело только с ASCII-значениями. Бонусные баллы за все, что достаточно универсально, чтобы взять полное регулярное выражение, а не просто обрабатывать пример угловых скобок. Еще больше бонусных баллов за ответ, который просто использует M-x query-replace-regexp.

Спасибо

Дом

1 Ответ

74 голосов
/ 24 марта 2009

Попробуйте M-x query-replace-regexp с "<\([^>]+\)>" в качестве строки поиска и "<\,(downcase \1)>" в качестве замены.

Это должно работать для Emacs 22 и более поздних версий, см. Это Стив Йегге в блоге для получения дополнительной информации о том, как выражения Lisp могут использоваться в строке замены.

Для более ранних версий Emacs вы можете попробовать что-то вроде этого:

(defun tags-to-lower-case ()
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward "<[^>]+>" nil t)
      (replace-match (downcase (match-string 0)) t))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...