如何在 Emacs Lisp 中用反斜杠替换字符串中的正斜杠?

问题描述 投票:0回答:4

我想在 emacs lisp 中用反斜杠替换正斜杠。 如果我用这个:

(replace-regexp-in-string "\/" "\\" path))

我收到错误。

(error "Invalid use of `\\' in replacement text")

那么如何在第二个正则表达式中表示反斜杠?

regex emacs string lisp
4个回答
14
投票

您在

"C:\\foo\\bar"
中看到的是字符串
"C:\foo\bar"
的文本表示,并带有转义反斜杠以供进一步处理。

例如,如果使用反斜杠字符创建长度为 1 的字符串:

(make-string 1 ?\\)

您会得到以下响应(例如,在迷你缓冲区中,当您使用 C-x C-e 评估上述内容时):

"\\"

获得你想要的东西的另一种方法是打开“literal”标志:

(replace-regexp-in-string "/" "\\" path t t)

顺便说一下,你不需要转义斜杠。


6
投票

需要双重转义吗?

(replace-regexp-in-string "\/" "\\\\" path)

2
投票

尝试使用 regexp-quote 函数,如下所示:

(replace-regexp-in-string "/" (regexp-quote "\\") "this/is//a/test")

regexp-quote 的文档如下

(正则表达式-引号字符串) 返回一个与字符串完全匹配的正则表达式字符串,而不是其他任何内容。


0
投票

不要使用 emacs,但我猜它支持某种形式的通过 \x 指定 unicode

例如也许这有效

(replace-regexp-in-string "\x005c" "\x005f" path))

(replace-regexp-in-string "\u005c" "\u005f" path))
© www.soinside.com 2019 - 2024. All rights reserved.