gpt4 book ai didi

Emacs:如何用 defun 中的 lisp 函数替换正则表达式?

转载 作者:太空宇宙 更新时间:2023-11-03 18:34:42 25 4
gpt4 key购买 nike

例如我想在括号、()、大写字母中制作所有文本。以交互方式执行以下操作很简单:

M-x query-replace-regexp
replace: "(\(.+?\))"
with : "(\,(upcase \1))"

相反,我想写一个 defun 来做到这一点:

(defun upcs ()
(interactive)
(goto-char 1)
(while (search-forward "(\\(.+?\\))" nil t) (replace-match "(\\,(upcase \\1))" t nil)))

但是没用!虽然下面的工作(它将 foobar 附加到带括号的文本):

(defun HOOK ()
(interactive)
(goto-char 1)
(while (search-forward-regexp "(\\(.+?\\))" nil t) (replace-match "(foo \\1 bar)" t nil)))

最佳答案

Luke 的回答几乎可以解决问题,但还不够。原始发布者希望将括号中的所有文本转换为大写,而 Luke 的代码将代码转换为大写并且还删除了括号。对正则表达式稍作修改即可提供正确的解决方案:

(defun upcs ()
(interactive)
(goto-char 1)
(while (search-forward-regexp "\\([^\\)]+\\)" nil t)
(replace-match (upcase (match-string 1)) t nil)))

关于Emacs:如何用 defun 中的 lisp 函数替换正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6395898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com