Java 正则表达式替换只包含 a-z0-9 的内容。

4

我想只显示字符串中的a-z0-9字符,其他字符应替换为空字符串。

String s=this.saveFileName.replaceAll("/[a-z0-9. ]/", "");

这个不起作用,有什么想法为什么吗?
4个回答

14

试试这个:

String s = "abc123ABC!@#$%^;'xyz";
String newString = s.replaceAll("[^a-z0-9]", "");
//newString is now "abc123xyz"

这利用了字符类中的否定(^)运算符,它基本上表示“匹配除以下字符以外的所有内容”。

此外,在定义Java正则表达式时不需要使用斜杠。


谢谢。我之前不知道有否定运算符。 - Rezler

2

您不需要这些//

一些语言如PHP要求在一对定界符之间放置正则表达式,而Java则不需要。

既然您想要替换除a-z0-9之外的所有内容,那么您需要使用正则表达式[^a-z0-9]或者[^a-z\\d]

[..]是用于匹配其中列出的字符的字符类。字符类还可以包含范围,例如[a-z]可以匹配一个小写字母。现在,在字符类开头加上^表示取反,因此[^a-z]可以匹配任何一个不是小写字母的字符。


我认为他想保留小写字母和数字,并剥离其他所有内容。你的代码剥离了小写字母、数字、句号和空格。不过问题的措辞相当糟糕,所以我不能确定。 - Mike Deck

1

你尝试过不带//标记吗?

String s=this.saveFileName.replaceAll("[^a-z0-9]", "");

0

这个正则表达式似乎可以解决问题:

String s="Testing-1.2.3_$".replaceAll("[^a-z0-9. ]", "");

输出:

esting1.2.3

符号^表示否定集合,斜杠不是必需的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接