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

时间:2009-06-24 10:26:53

标签: regex emacs string lisp

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

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

我收到错误。

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

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

4 个答案:

答案 0 :(得分:12)

您在"C:\\foo\\bar"中看到的是字符串"C:\foo\bar"的文字表示,其中包含用于进一步处理的转义反斜杠。

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

(make-string 1 ?\\)

您收到以下回复(例如,在使用C-x C-e评估上述内容时,在迷你缓冲区中):

"\\"

获得所需内容的另一种方法是切换“文字”标志:

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

顺便说一句,你不需要逃避斜线。

答案 1 :(得分:6)

是否需要双重转义?

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

答案 2 :(得分:2)

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

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

regexp-quote的文档内容为

  

(regexp-quote字符串)   返回一个与字符串完全匹配的正则表达式字符串。

答案 3 :(得分:0)

不要使用emacs,但我想它支持通过\ x

指定unicode的某种形式

e.g。也许这有效

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

(replace-regexp-in-string "\u005c" "\u005f" path))