gpt4 book ai didi

regex - 在 Elixir 中,如何使用非单词字符作为分隔符拆分字符串,但还允许使用 +、- 等数学运算符?

转载 作者:行者123 更新时间:2023-12-04 09:30:48 26 4
gpt4 key购买 nike

在 Elixir 中,我想拆分一个字符串,将所有非单词字符视为分隔符,包括“Ogham Space Mark ( )”(不应与减号 (-) 符号混淆)。
所以,如果我拆分字符串:

"1\x002\x013\n4\r5 6\t7 + asda - 3434"
结果应该是:
["1","2","3","4","5","6","7","+","asda","-","3434"]
我试图弄清楚如何用 Regex 做到这一点,但到目前为止我能做到的最好的是:
Regex.split(~r/[\W| ]+/, input_string)
.... 但这会降低 +-符号,因为这些不被视为单词字符。
或者
Regex.split(~r/[^[:punct:]|^[:alnum:]| ]+/, input_string)
但这未能在 Ogham Space Mark 上 split 。
这实际上可以正常工作,但对于额外的转换来说是不优雅的:
Regex.split(~r/[^[:punct:]|^[:alnum:]]+/, String.replace(input_string, " ", " "))
有没有办法通过单个 Regex 调用来拆分它?

最佳答案

Elixir 正则表达式由 PCRE 正则表达式引擎处理,您的输入字符串包含整个 Unicode 字符表中的字符,而不仅仅是 ASCII 部分。
您可以在两个 PCRE 动词的帮助下启用 Unicode 模式,(*UTF)(*UCP) :

Regex.split(~r/(*UTF)(*UCP)[^\w\/*+-]+/, "1\x002\x013\n4\r5 6\t7 + asda - 3434")
它会输出:
["1", "2", "3", "4", "5", "6", "7", "+", "asda", "-", "3434"]
Elixir demo online .
注意 : ~r/[^\w\/*+-]+/u~r/(*UTF)(*UCP)[^\w\/*+-]+/是等价的, u是两个 PCRE 动词的简写。
正则表达式匹配
  • (*UTF)(*UCP) - (*UTF)将输入字符串视为 Unicode 代码点序列和 (*UCP)使 \w Unicode 感知(因此匹配 [\p{L}\p{N}_] 个字符)
  • [^\w\/*+-]+ - 1 个或多个字母、数字以外的字符,/ , * , +- .

  • 请注意 -字面意义 - char 放在字符类的末尾时不必转义。

    关于regex - 在 Elixir 中,如何使用非单词字符作为分隔符拆分字符串,但还允许使用 +、- 等数学运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62860596/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com