Emacs查询替换文本转换

Chr*_*way 9 regex emacs

我想在文件中找到与t [A-Z]u形式的正则表达式匹配的任何文本(即匹配t后跟大写字母和另一个匹配u,并转换匹配的文本以使大写字母为小写.例如,为正则表达式x[A-Z]y

xAy
Run Code Online (Sandbox Code Playgroud)

xay
Run Code Online (Sandbox Code Playgroud)

xZy
Run Code Online (Sandbox Code Playgroud)

xzy
Run Code Online (Sandbox Code Playgroud)

Emacs的query-replace功能允许反向引用,但AFAIK不是匹配文本的转换.是否有内置功能可以做到这一点?有没有人有我可以使用的简短Elisp功能?

UPDATE

@Marcel Levy有它:\,在替换表达式中引入了(任意?)Elisp表达式.例如,上面的解决方案是

M-x replace-regexp <RET> x\([A-Z]\)z <RET> x\,(downcase \1)z
Run Code Online (Sandbox Code Playgroud)

Mar*_*evy 13

看起来Steve Yegge几年前已经发布了这个答案:"Shiny and New:Emacs 22." 向下滚动到"更换字符串中的更改大小写",您将看到他使用该replace-regexp函数的示例代码.

一般的答案是你使用"\"来调用任何lisp表达式作为替换字符串的一部分,如\,(capitalize \1).阅读帮助文本,看起来它只是在交互模式下,但这似乎是最需要的地方.