Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Elixir正则表达式替换方形括号和逗号_Regex_Elixir - Fatal编程技术网

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]").