首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用正则表达式拆分字符串

使用正则表达式拆分字符串
EN

Stack Overflow用户
提问于 2019-10-17 23:07:17
回答 1查看 600关注 0票数 1

我有下面这行代码,我需要使用分隔符来拆分字符串

代码语言:javascript
运行
复制
>>String.split("hello()", ~r{(?=\W)|(?=\d)(?<=\D)})
>>["hello","(",")"]

在这种情况下是正常工作的,但我需要添加一些更改,但我不知道如何做。

它必须分割字符串:"-a“",但不分割它们。所以我需要:

代码语言:javascript
运行
复制
>>["-","a"]

它不必拆分带有数字"hello1“的字符串。我需要:

代码语言:javascript
运行
复制
>>["hello1"]
EN

Stack Overflow用户

发布于 2019-10-22 04:42:39

要做到这一点,最好的方法是根本不使用正则表达式,因为它可以通过模式匹配轻松完成(如果您不需要处理Unicode):

代码语言:javascript
运行
复制
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

这明确地说明了您要查找的内容以及如何获取该数据。另一个特性是它将始终与解析的字符串的长度成线性关系。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58435674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档