我有一个转换规则:
"0549$2"
如何将此规则应用于Elixir中的字符串? 在红宝石中,我使用:
format("0549%2$s", *["88", "77"])
=> "054977"
在长生不老药中,我写道:
:io.format("0549%2$s", ["88", "77"])
** (ArgumentError) argument error
(stdlib) :io.format(#PID<0.54.0>, "0549%2$s", ["88", "77"])
因为来自erlang的:io.format无法理解这种格式
答案 0 :(得分:3)
因此,您要用列表中的相应元素(从1开始索引)替换所有$
,后跟一个整数吗?这是使用Regex.replace/3
的一种方法:
defmodule A do
def format(string, list) do
Regex.replace(~r/\$(\d+)/, string, fn _, index ->
Enum.at(list, String.to_integer(index) - 1)
end)
end
end
IO.inspect A.format("0549$2", ["88", "77"])
IO.inspect A.format("0549$1", ["88", "77"])
输出:
"054977"
"054988"
答案 1 :(得分:3)
您可以使用:io_lib.format/2
。它生成字符列表,之后可以将其转换为二进制:
"0549~i~s"
|> :io_lib.format(~w[77 88])
|> to_string()
#⇒ "054988"
~i
停留在“忽略下一个词” ~s
用于将参数视为二进制 边注: io.format
将格式化后的字符串输出到IO设备,并返回:ok
。