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

时间:2015-11-08 20:12:51

标签: java regex character

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

但如何结合这两者。 ?

如果我尝试类似

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

它无法正常工作..

1 个答案:

答案 0 :(得分:3)

只需将角色类合并为一个:

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_]