2009-06-24 11 views

Odpowiedz

12

Co widzisz w "C:\\foo\\bar" jest reprezentacja tekstowa napisu "C:\foo\bar", ze zbiegłych ukośniki do dalszego przetwarzania.

Na przykład, jeśli się łańcuch o długości 1 z charakterem backslash:

(make-string 1 ?\\) 

otrzymasz następującą odpowiedź (np minibufora, jeśli oceniać wyżej z Cx Ce):

"\\" 

Innym sposobem, aby dostać to, co chcesz, aby przełączyć "dosłownego" flagę na:

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

Przy okazji, nie musisz uciekać z ukośnika.

6

Czy trzeba podwójnie uciekać?

tj

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

Nie, próbowałem już: C:/foo/bar staje się C: \\ foo \\ bar ... – Peter

+0

Czy próbowałeś też \\\? – schnaader

+0

yep :-) ale jest to błąd składniowy (ostatni cytat jest uniknięty) – Peter

0

nie stosować emacsowi ale że to umożliwia pewne formy określające unicode poprzez \ x

np Może to działa

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

lub

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

Nie, jest przedstawiony kod Unicode według \ uXXXX lub \ u00XXXXXX. – Svante

+0

um ok, a następnie przełącz na \ u005c i \ u005f? nie? – jitter

2

Spróbuj użyć funkcji regexp-środki, tak: dokumentacja

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

REGEXP-quote czyta

(ciąg regexp-cytat) Zwraca ciąg regexp, który pasuje dokładnie ciąg i nic więcej.

+0

Nie padało na twoją paradę, ale ta odpowiedź została odrzucona w komentarzach drugiej odpowiedzi. – seth

+0

Ups, brakowało tego. Dziękuję Ci. – jlf

Powiązane problemy