Эликсир санация струнами с \ " - PullRequest
0 голосов
/ 23 октября 2019

После получения заголовков из ответа API у меня есть следующая строка:

"\"Web Service Authentication\""

Какой самый простой способ санировать эти строки в:

"Web Service Authentication"

Ответы [ 3 ]

4 голосов
/ 23 октября 2019

Вы можете использовать String.replace/3 для удаления кавычек

"\"Web Service Authentication\"" |> String.replace("\"", "")

или String.trim/2, если кавычки только на сторонах

"\"Web Service Authentication\"" |> String.trim("\"")
2 голосов
/ 24 октября 2019

Я думаю, что String.trim/2 будет вашим лучшим другом здесь (я предполагаю, что кавычки - это только ваши первые и последние символы), но если вы ищете подход сопоставления с образцом:

iex> length = byte_size("\"Web Service Authentication\"") - 2
26
iex> <<?", trimmed::bytes-size(length), ?">> = "\"Web Service Authentication\""
"\"Web Service Authentication\""
iex> trimmed
"Web Service Authentication"
1 голос
/ 23 октября 2019

Эзотерический пример с Kernel.SpecialForms.for/1 пониманием

# removes all occurences of quotes
for <<c <- "\"hello world\"">>, c != ?", into: "", do: <<c>>  
#⇒ "hello world"

Рекурсивно:

defmodule Trim do
  # removes all occurences of quotes
  def drop(s, what \\ <<?">>), do: do_drop(s, what, "")

  defp do_drop("", _what, acc), do: acc
  defp do_drop(<<?">> <> rest, what, acc),
    do: do_drop(rest, what, acc)
  defp do_drop(<<c :: binary-size(1), rest :: binary>>, what, acc),
    do: do_drop(rest, what, acc <> c)
end

Trim.drop(~s|\"foo\"|)

Чистые эзотерические списки:

# removes opening and closing quotes only
with ["\""|s] <- :erlang.binary_to_list(~s|"foo"|),
     s <- :lists.reverse(s),
     ["\""|s] <- s,
     s <- :lists.reverse(s),
  do: :erlang.list_to_binary(s)
#⇒ "foo"

...