Elixir 如何在长生不老药保持分离器中拆分字符串?

Elixir 如何在长生不老药保持分离器中拆分字符串?,elixir,Elixir,我有一个带有特殊字符的字符串: >> text = "ab()-cdef" 我想把字母和列表中的特殊字符分开 >> list = ["ab", "(" , ")" ,"-", "cdef"] 我试过了 list = String.split(text,["(",")","-"], trim: false) 但是我失去了特殊的角色 list = ["ab","","","","cdef"] 我使用了Regex.scan/2 ~r{\(|\)|-|[a-z]*} |&

我有一个带有特殊字符的字符串:

>> text = "ab()-cdef"
我想把字母和列表中的特殊字符分开

>> list = ["ab", "(" , ")" ,"-", "cdef"]
我试过了

list = String.split(text,["(",")","-"], trim: false)
但是我失去了特殊的角色

list = ["ab","","","","cdef"]

我使用了
Regex.scan/2

~r{\(|\)|-|[a-z]*}
|> Regex.scan("ab()-cdef")
|> List.flatten()
|> Enum.filter(fn s -> String.length(s) > 0 end)

我必须转义一些特殊字符,例如,
变成了
\(
)并用管道分隔特殊字符。

您就快到了。用于在非字母上拆分字符串

String.split“ab()-cdef”,~r/(?提到
:include_captures
选项:

iex>Regex.split(~r{(x)},“Elixir”,include_捕获:true)
[“Eli”、“x”、“ir”]
iex>Regex.split(~r{a(?b)c},“abc”,on:[:second],include_-captures:true)
[“a”、“b”、“c”]
请注意,当与正则表达式一起使用时,也可以使用此选项