2015-10-28 2 views
1

Я пробовал несколько способов, но я все еще не могу заставить его работать.Как удалить обратную косую черту из строки Clojure

(clojure.string/replace "[\"fish\"]" "\\" "") 

Я хочу, чтобы это было «[» рыба «]»

Я также попытался .replaceAll

Проблема заключается в том, я не знаю, как передать в \ в параметры. Я посмотрел на ответ предложил здесь:

Replacing * with \* in Clojure

, который имеет в виду добавление \ вместо удаления, но это не работает для меня

ответ

8

бесцельно короткий ответ вы не в состоянии удалить их, потому что они не должны там быть удалены.

Позволяет шаг через оценку приведенное выше выражение:

  1. Сначала он считывает строку (clojure.string/replace "[\"fish\"]" "\\" "") как набор символов и разбирает его в список. который выглядит как (имя-функции string1 string2 string3)

    • string1 = [ "рыба"] (заметим, что нет \ 's они где потребляются читателя)
    • строка2 = "\" (опять-таки без дополнительной \ 's)
    • string3 = „“
  2. тогда она оценивает, что выражение, вызывая функцию, которая, поскольку вход содержит не \ s он просто возвращает его без изменений.

  3. затем выводит результат в формате, пригодном для последующего чтения. Чтобы сделать этот код безопасным для чтения, он должен избежать «S путем добавления \ s, как он записывает их на экран.

в РЕПЛ мы можем увидеть это, если мы выводим выход для человека, а не расход потребления компьютера:

user> "[\"fish\"]" 
"[\"fish\"]" 
user> (println "[\"fish\"]") 
["fish"] 

или

user> (println (clojure.string/replace "[\"fish\"]" "\\" "")) 
["fish"] 
2

"[\"fish\"]"является «[» рыба "]"

Котировки escaped. Если ваша строка была буквально «[\" fish \ "]", она выглядела бы как "[\\\"fish\\\"]".

В этом случае

> (clojure.string/replace "[\\\"fish\\\"]" #"\\" "") 
"[\"fish\"]" 
0

Я could't понять, что именно вы хотите, чтобы ваш результат будет, но если вы пытаетесь разобрать данную строку и ожидать, что ваш выход будет вектор, то вы можете использовать Чешир Clojure, чтобы разобрать строку, как это:

(vec (чешир.ядро/разобрать-строку "[\" рыба \ "]")))

-> [ "рыба"]

Если вы хотите простой строковый результат, то вы можете использовать приведенные выше ответы/решения.

Смежные вопросы