【发布时间】:2019-12-04 20:09:57
【问题描述】:
所以我有这个字符串,我想从中删除非字母数字字符:
my_string = "¿Habla usted Inglés, por favor?"
在这种情况下,基本上我想去掉 ?、¿ 和 ,。然后我将这些单词分成一个列表,并对每个单词做各种有趣的事情。
我正在使用
String.replace(my_string, my_regex, "")
String.split(" ")
做这项工作。我尝试使用两个不同的正则表达式字符串:
my_regex = ~r/[\_\.,:;\?¿¡\!&@$%\^]/
my_regex = ~r/[[:punct:]]/
第一个就像一个魅力。我最终得到:
["habla", "usted", "inglés"]
第二个删除了正确的字符,但我最终得到:
[<<194, 104, 97, 98, 108, 97>>, "usted", <<105, 110, 103, 108, 195, 115>>]
起初我认为奇怪的输出只是因为非 ascii alpha 被转储到控制台。但是,当我尝试匹配预期的字符串列表时,它会失败。
无论如何,我只是不明白为什么两个不同的正则表达式会导致列表中的字符串不同的输出。
这是可以在 iex 中运行的代码,以简洁地重现我的问题:
a = ~r/[\_\.,:;\?¿¡\!&@$%\^]/
b = ~r/[[:punct:]]/
y = "¿Habla usted Inglés, por favor?"
String.replace(y, a, "")
# -> "Habla usted Inglés por favor"
String.replace(y, b, "")
# -> <<194, 72, 97, 98, 108, 97, 32, 117, 115, 116, 101, 100, 32, 73, 110, 103, 108, 195, 115, 32, 112, 111, 114, 32, 102, 97, 118, 111, 114>>
【问题讨论】:
标签: regex unicode elixir unicode-string