Как заменить прямую и обратную косую черту в строке в Emacs Lisp? - PullRequest
9 голосов
/ 24 июня 2009

Я бы хотел заменить прямые слэши на обратную косую черту в emacs lisp. Если я использую это:

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

Я получаю ошибку.

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

Итак, как представить обратную косую черту во втором регулярном выражении?

Ответы [ 4 ]

12 голосов
/ 24 июня 2009

То, что вы видите в "C:\\foo\\bar", - это текстовое представление строки "C:\foo\bar" с экранированными обратными слешами для дальнейшей обработки.

Например, если вы создаете строку длиной 1 с символом обратной косой черты:

(make-string 1 ?\\)

вы получите следующий ответ (например, в минибуфере, когда вы оцениваете вышеупомянутое с помощью C-x C-e):

"\\"

Еще один способ получить то, что вы хотите, это включить флаг «literal»:

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

Кстати, вам не нужно избегать косой черты.

6 голосов
/ 24 июня 2009

Должен ли он быть двойным?

т.е.

(replace-regexp-in-string "\/" "\\\\" path)
2 голосов
/ 24 июня 2009

Попробуйте использовать функцию regexp-quote, например:

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

документация regexp-quote гласит

(строка регулярного выражения в кавычках) Вернуть строку регулярного выражения, которая точно соответствует строке и ничего больше.

0 голосов
/ 24 июня 2009

Не используйте emacs, но я думаю, что он поддерживает некоторую форму указания юникода через \ x

например. возможно это работает

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

или

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