我尝试使用
删除字符串中的所有标点符号String.replace(sentence, ~r[\p{P}\p{S}], "")
然而,它并没有删除所有标点符号!作为一个说明性的例子:
iex(1)> String.replace("foo!&^%$?", ~r[\p{P}\p{S}], "")
"foo!?"
我应该使用什么?
答案 0 :(得分:17)
可能需要/
... /
作为模式delimiters:
String.replace("foo!&^%$?", ~r/[\p{P}\p{S}]/, "")
可以解释结果,因为其他[
]
将用作样本中的分隔符,对应于\p{P}\p{S}
作为序列并生成foo!?
(见regex101 example)
还会添加+
quantifier:~r/[\p{P}\p{S}]+/
答案 1 :(得分:0)
如果您仅使用英语字符串,则仅使用POSIX character classes最为简单明了:
String.replace("foo!&^%$?", ~r/[[:punct:]]/, "")
答案 2 :(得分:0)
我迟到了,但您必须调整正则表达式并对其进行自定义,尤其是在您尝试保留某些项目时,例如连字符(在某些语言方面被视为标点符号)。
我的替换有点冗长,但让我控制要替换的内容:
String.replace(str, ~r/[!#$%&()*+,.:;<=>?@\^_`{|}~-]/, "")
这让我可以将连字符保留在单词中,例如 co-operate,同时删除 :
或其他字符。