要在emacs lisp中用大写字符替换下划线和后面的字符吗

要在emacs lisp中用大写字符替换下划线和后面的字符吗,emacs,elisp,Emacs,Elisp,我想使用emacs lisp将字符串abcd\u efg替换为abcdEfg。出于某种原因,以下方法不起作用 (replace-regexp-in-string "_\(.\)" "\,(capitalize \1) "abcd_efg") 但当我这样做的时候,它就起作用了 M-x replace-regexp _\(.\) \,(capitalize \1) 原因是\是elisp字符串中的转义字符。因此,如果要创建包含反斜杠的regexp,必须编写\\ 其次,\,构造在调用函数时不可用

我想使用emacs lisp将字符串abcd\u efg替换为abcdEfg。出于某种原因,以下方法不起作用

 (replace-regexp-in-string "_\(.\)" "\,(capitalize \1) "abcd_efg")
但当我这样做的时候,它就起作用了

 M-x replace-regexp _\(.\) \,(capitalize \1)

原因是
\
是elisp字符串中的转义字符。因此,如果要创建包含反斜杠的regexp,必须编写
\\

其次,
\,
构造在调用函数时不可用

(let ((s "abc_def_ghi_2_")
      (pos 0))
  (while (string-match "_\\(.\\)" s pos)
    (setq pos (match-end 0))
    (setq s (replace-match (capitalize (match-string 1 s)) nil nil s 1)))
  s)
这将返回:

"abc_Def_Ghi_2_"
可能重复的