我有下面这行代码,我需要使用分隔符来拆分字符串
>>String.split("hello()", ~r{(?=\W)|(?=\d)(?<=\D)})
>>["hello","(",")"]
在这种情况下是正常工作的,但我需要添加一些更改,但我不知道如何做。
它必须分割字符串:"-a“",但不分割它们。所以我需要:
>>["-","a"]
它不必拆分带有数字"hello1“的字符串。我需要:
>>["hello1"]
发布于 2019-10-22 04:42:39
要做到这一点,最好的方法是根本不使用正则表达式,因为它可以通过模式匹配轻松完成(如果您不需要处理Unicode):
defguard is_alnum(c) when c in ?a..?z or c in ?A..?Z or c in ?0..?9
def parse(string), do: do_parse(string, "", [])
defp do_parse("", "", tokens), do: Enum.reverse(tokens)
defp do_parse("", curr, tokens), do: Enum.reverse([curr | tokens])
defp do_parse(<<c, rest::binary>>, curr, tokens) when is_alnum(c) do
do_parse(rest, curr <> <<c>>, tokens)
end
defp do_parse(<<c, rest::binary>>, "", tokens) do
do_parse(rest, "", [<<c>> | tokens])
end
defp do_parse(<<c, rest::binary>>, curr, tokens) do
do_parse(rest, "", [<<c>>, curr | tokens])
end
这明确地说明了您要查找的内容以及如何获取该数据。另一个特性是它将始终与解析的字符串的长度成线性关系。
https://stackoverflow.com/questions/58435674
复制相似问题