Regex Elixir正则表达式替换方形括号和逗号
如上所述,目标是删除方括号和逗号。Regex Elixir正则表达式替换方形括号和逗号,regex,elixir,Regex,Elixir,如上所述,目标是删除方括号和逗号。 我目前的解决方案如下: 鉴于: "[40.45694301152436, -3.6907402812214514]" |> String.replace("[", "") |> String.replace(",", "") |> String.replace("]", "") |> String.split(" ") |> Enum.map(fn x -> String.to_float(x) end) 输出: [40.
我目前的解决方案如下: 鉴于:
"[40.45694301152436, -3.6907402812214514]"
|> String.replace("[", "")
|> String.replace(",", "")
|> String.replace("]", "")
|> String.split(" ")
|> Enum.map(fn x -> String.to_float(x) end)
输出:
[40.45694301152436, -3.6907402812214514]
我知道这可以压缩得更多,但我整天都在看示例,但都没有完成上面的工作。可以将正则表达式传递给
字符串。替换。在Elixir中,您可以使用~r
构建正则表达式
您可以将正则表达式传递给string.replace,而不是字符串。在Elixir中,您可以使用~r
构建正则表达式
如果您关心的是可读性,@fhdhsni给了您一个很好的答案,我建议将整个内容抽象为一个单独的函数,如下所示:
defmodule T do
def parsefloats(stringtobeparsed) do
stringtobeparsed
|> String.replace("[", "")
|> String.replace(",", "")
|> String.replace("]", "")
|> String.split(" ")
|> Enum.map(fn x -> String.to_float(x) end)
end
end
然后你这样称呼它:
[x,y] = T.parsefloats("[40.45694301152436, -3.6907402812214514]")
# [40.45694301152436, -3.6907402812214514]
iex(3)> x
# 40.45694301152436
iex(4)> y
# -3.6907402812214514
我认为,在更紧凑的代码方面没有任何改进,但可读性更强 虽然@fhdhsni给了你一个很好的答案,如果你关心的是可读性的话,我建议将整个内容抽象为一个单独的函数,如下所示:
defmodule T do
def parsefloats(stringtobeparsed) do
stringtobeparsed
|> String.replace("[", "")
|> String.replace(",", "")
|> String.replace("]", "")
|> String.split(" ")
|> Enum.map(fn x -> String.to_float(x) end)
end
end
然后你这样称呼它:
[x,y] = T.parsefloats("[40.45694301152436, -3.6907402812214514]")
# [40.45694301152436, -3.6907402812214514]
iex(3)> x
# 40.45694301152436
iex(4)> y
# -3.6907402812214514
我认为,在更紧凑的代码方面没有任何改进,但可读性更强 这里有另一个选项,使用String.slice
:
"[40.45694301152436, -3.6907402812214514]"
|> String.slice(1..-2)
|> String.split(~r/,\s+/)
|> Enum.map(&String.to_float/1)
干杯 这里有另一个选项,使用String.slice
:
"[40.45694301152436, -3.6907402812214514]"
|> String.slice(1..-2)
|> String.split(~r/,\s+/)
|> Enum.map(&String.to_float/1)
干杯 除了字符串替换解决方案,您还可以查看
这样,字符串将被解析,您将返回您正在查找的列表
{list, _} = Code.eval_string "[40.45694301152436, -3.6907402812214514]"
# {[40.45694301152436, -3.6907402812214514], []}
除了字符串替换解决方案之外,您还可以查看
这样,字符串将被解析,您将返回您正在查找的列表
{list, _} = Code.eval_string "[40.45694301152436, -3.6907402812214514]"
# {[40.45694301152436, -3.6907402812214514], []}
我认为对您关于使用JSON解析器的问题的评论是最好的,其次是fhdhsni的简单回答。但这里有一种提取数字的方法,而不是替换括号:
str = "[40.45694301152436, -3.6907402812214514]"
regex = ~r/([\d\.-]+), ([\d\.+-]+)/
Regex.run(regex, str, capture: :all_but_first) |> Enum.map(&String.to_float/1)
输出:
[40.45694301152436, -3.6907402812214514]
我认为对您关于使用JSON解析器的问题的评论是最好的,其次是fhdhsni的简单回答。但这里有一种提取数字的方法,而不是替换括号:
str = "[40.45694301152436, -3.6907402812214514]"
regex = ~r/([\d\.-]+), ([\d\.+-]+)/
Regex.run(regex, str, capture: :all_but_first) |> Enum.map(&String.to_float/1)
输出:
[40.45694301152436, -3.6907402812214514]
String.replace(~r'[][,]+',“”)
如果您已经将某种JSON库(例如毒药)用于其他目的,您可以使用毒药.decode!(“[40.45694301152436,-3.6907402812214514]”。String.replace(~r'[][,]+',“”)
如果您已经将某种JSON库(例如毒药)用于其他目的,您可以使用毒药.decode!("[40.45694301152436, -3.6907402812214514]").