在Elixir中,我想拆分一个字符串,将所有非单词字符视为分隔符,包括"Ogham空格标记()"(不应将其与减号(-(混淆(。
所以,如果我拆分字符串:
"1x002x013n4r5 6t7 + asda - 3434"
结果应该是:
["1","2","3","4","5","6","7","+","asda","-","3434"]
我正在尝试找出如何使用Regex做到这一点,但到目前为止我能做到的最好的是:
Regex.split(~r/[W| ]+/, input_string)
但由于CCD_ 1和CCD_。
或
Regex.split(~r/[^[:punct:]|^[:alnum:]| ]+/, input_string)
但这并没有在奥格姆太空标记上分裂。
这实际上是正确的,但对于额外的转换来说是不雅的:
Regex.split(~r/[^[:punct:]|^[:alnum:]]+/, String.replace(input_string, " ", " "))
有没有任何方法可以通过一个Regex调用将其拆分?
Elixir正则表达式由PCRE正则表达式引擎处理,您的输入字符串包含整个Unicode字符表中的字符,而不仅仅是ASCII部分。
您可以在两个PCRE动词(*UTF)(*UCP)
:的帮助下启用Unicode模式
Regex.split(~r/(*UTF)(*UCP)[^w/*+-]+/, "1x002x013n4r5 6t7 + asda - 3434")
它将输出:
["1", "2", "3", "4", "5", "6", "7", "+", "asda", "-", "3434"]
在线观看Elixir演示。
注意:~r/[^w/*+-]+/u
和~r/(*UTF)(*UCP)[^w/*+-]+/
是等价的,u
是两个PCRE动词的简写。
正则表达式与匹配
(*UTF)(*UCP)
-(*UTF)
将输入字符串视为Unicode码点序列,(*UCP)
使+
0具有Unicode意识(因此与[p{L}p{N}_]
字符匹配([^w/*+-]+
-除字母、数字、/
、*
、+
和-
之外的1个或多个字符
注意,当放在字符类的末尾时,字面意义上的-
字符的-
不必转义。