2017-10-11 111 views
1

我需要这个字符串转换在与string.replace药剂

"/{foo}/{bar}.{format}" 

"/#{a["foo"]}/#{a["bar"]}.#{a["format"]}" 

因为我有这些属性的列表。 例如

a["foo"] = "home" 
a["bar"] = "picture" 
a["format"] = "jpg" 

我尝试这样的事情

String.replace(a,"{",~s(#{)) 

但我得到这个错误(

的SyntaxError)IEX:8:意外的标记:)

我尝试了甚至一个正则表达式来创建一个List来尝试获得我的结果,但是我d on't明白我怎么可以把这个正则表达式([^{]*?)\w(?=\})

回答

4

假设你想结果是该字符串"/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 

输出:

"/home/picture.jpg" 
+0

令人惊叹!这是我正在寻找的! – monkeyUser