Elixir 获取嵌套列表项的惯用长生不老药?
我有一个嵌套的列表项Elixir 获取嵌套列表项的惯用长生不老药?,elixir,Elixir,我有一个嵌套的列表项 [["Bearer"], ["xxxyyyxxxx123"]] # parsed from "Bearer xxxyyyxxxx123" 我只需要得到“xxxyyxx123”的值 我现在正在这样做,但我不认为这是惯用的 token = Regex.scan(~r/^Bearer|\w+/, header_content) |> List.flatten |> List.last 保持相同的Regex.scan/2调用的惯用方
[["Bearer"], ["xxxyyyxxxx123"]] # parsed from "Bearer xxxyyyxxxx123"
我只需要得到“xxxyyxx123”的值
我现在正在这样做,但我不认为这是惯用的
token = Regex.scan(~r/^Bearer|\w+/, header_content)
|> List.flatten
|> List.last
保持相同的
Regex.scan/2
调用的惯用方法是使用模式匹配
iex(1)> header_content = "Bearer xxxyyyxxxx123"
"Bearer xxxyyyxxxx123"
iex(2)> [_, [token]] = Regex.scan(~r/^Bearer|\w+/, header_content)
[["Bearer"], ["xxxyyyxxxx123"]]
iex(3)> token
"xxxyyyxxxx123"
除非我遗漏了什么,否则匹配此字符串的更惯用的方法(可能更有效)是使用不同的正则表达式和模式匹配:
iex(4)> [_, token] = Regex.run(~r/Bearer\s*(.*)/, header_content)
["Bearer xxxyyyxxxx123", "xxxyyyxxxx123"]
iex(5)> token
"xxxyyyxxxx123"
如果只是为了匹配字符串
“Bearer xxxyyyxxxx123”
,还有另一种惯用的长生不老药方法
iex(1)> "Bearer " <> token = "Bearer xxxyyyxxxx123"
"Bearer xxxyyyxxxx123"
iex(2)> token
"xxxyyyxxxx123"
iex(1)>“承载人”令牌=“承载人xxxyyxx123”
“持票人XXXYYYXX123”
iex(2)>令牌
“xxxyyyxxxx123”
请注意,只有当第一部分是文本二进制文件时,才可以像这样进行匹配。它被记录为Marco。忽略整个单词作为匹配是如此普遍,以至于有一个选项用于该
:all_但_first
[token]=Regex.run(~r/Bearer\s*(.*)/,header\u content,capture::all\u,但不在前面)
我会伸手去拿String.split/1
-[\uu,token]=String.split(header\u content)
但是我很想知道那些知识更渊博的人的意见。我同意——在Elixir中使用模式匹配几乎总是比任何其他选项都更惯用。