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

Pet*_*ter 9 lisp regex string emacs

我想在emacs lisp中将前向slaches替换为反斜杠.如果我用这个:

(replace-regexp-in-string "\/" "\\" path))
Run Code Online (Sandbox Code Playgroud)

我收到一个错误.

(error "Invalid use of `\\' in replacement text")
Run Code Online (Sandbox Code Playgroud)

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

Sva*_*nte 12

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

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

(make-string 1 ?\\)
Run Code Online (Sandbox Code Playgroud)

您得到以下响应(例如,在使用Cx Ce评估上述内容时,在迷你缓冲区中):

"\\"
Run Code Online (Sandbox Code Playgroud)

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

(replace-regexp-in-string "/" "\\" path t t)
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*ton 6

是否需要双重转义?

(replace-regexp-in-string "\/" "\\\\" path)
Run Code Online (Sandbox Code Playgroud)

  • 双重逃脱,即.连续4个反斜杠*做*工作.您在结果中看到2个连续反斜杠的原因是它们在字符串中被转义.如果您尝试再次输出字符串,它看起来是正确的. (7认同)
  • 您也可以这样写它以获得更好的可读性:( replace-regexp-in-string"/"(regexp-quote"\\")path) (2认同)