从字符串中删除非数字和非字符符号
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_]
.
所以我发现很多帖子都可以使用 "[^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_]
.