我需要转换这个字符串
"/{foo}/{bar}.{format}"
Run Code Online (Sandbox Code Playgroud)
在
"/#{a["foo"]}/#{a["bar"]}.#{a["format"]}"
Run Code Online (Sandbox Code Playgroud)
因为我有一个包含这些属性的列表.例如
a["foo"] = "home"
a["bar"] = "picture"
a["format"] = "jpg"
Run Code Online (Sandbox Code Playgroud)
我尝试这样的事情
String.replace(a,"{",~s(#{))
Run Code Online (Sandbox Code Playgroud)
但我得到了这个错误(
SyntaxError)iex:8:意外令牌:)
我甚至尝试使用正则表达式来创建一个List以尝试获得我的结果,但我不明白如何应用此正则表达式 ([^{]*?)\w(?=\})
假设您希望将字符串"/home/picture.jpg"作为结果,则可以使用Regex.replace/3一个函数作为替换:
map = %{
"foo" => "home",
"bar" => "picture",
"format" => "jpg",
}
string = "/{foo}/{bar}.{format}"
Regex.replace(~r/{([a-z]+)?}/, string, fn _, match ->
map[match]
end)
|> IO.inspect
Run Code Online (Sandbox Code Playgroud)
输出:
"/home/picture.jpg"
Run Code Online (Sandbox Code Playgroud)
S在sigil中使用资本:
iex> a = "/{foo}/{bar}.{format}"
iex> IO.puts String.replace(a,"{",~S(#{))
/#{foo}/#{bar}.#{format}
Run Code Online (Sandbox Code Playgroud)
Sigils在这里解释:https://elixir-lang.org/getting-started/sigils.html#interpolation-and-escaping-in-sigils
| 归档时间: |
|
| 查看次数: |
2891 次 |
| 最近记录: |