从字符串中删除非数字和非字符符号

Remove non-numeric and non-characters symbols from String

所以我发现很多帖子都可以使用 "[^0-9.]" 删除非数字字符,使用 "[^\p{L}\s]+" 删除非字符..

但是如何将这两者结合起来。 ?

如果我尝试

replaceAll("[^\p{L}\s]+" + "[^0-9.]"

它不起作用..

把字符类合二为一:

s = s.replaceAll("[^\p{L}\s0-9.]+", "");

添加字符串时,生成的正则表达式模式类似于 [^\p{L}\s]+[^0-9.],匹配非字符和非空白字母(出现 1 次或多次)和 1 个非数字、非句点字符。

在您的情况下,您想要匹配一个不是数字、字母、空格或句点的字符(或 1 个或多个字符)。因此,两个否定字符 类 应该合并为 1,而不仅仅是连接

如果您还打算排除下划线,您可以尝试更短的版本:

s = s.replaceAll("[^\w\s.]+", "");

因为 \w 匹配 [\p{L}0-9_].