我有这个嵌套的列表项,
[["Bearer"], ["xxxyyyxxxx123"]] # parsed from "Bearer xxxyyyxxxx123"
我只需要获取“xxxyyyxxxx123”值。
我现在正在这样做,但我不认为这是惯用的。
token = Regex.scan(~r/^Bearer|\w+/, header_content)
|> List.flatten
|> List.last
答案 0 :(得分:4)
保持相同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"
答案 1 :(得分:1)
如果它只是匹配字符串"Bearer xxxyyyxxxx123"
,那么还有另一种惯用的Elixir方法。
iex(1)> "Bearer " <> token = "Bearer xxxyyyxxxx123"
"Bearer xxxyyyxxxx123"
iex(2)> token
"xxxyyyxxxx123"
请注意,只有当第一部分是文字二进制时才能匹配。它被记录为Marco Kernel.<>/2。