Java 正则表达式:从字符串中删除除数字以外的所有内容

37
我有两个字符串,string1 = 44.365 Online orderstring2 = 0 Request Delivery。现在我想对这些字符串应用正则表达式,以过滤掉除数字以外的所有内容,这样我就可以得到整数,如 string1 = 44365string2 = 0
如何实现这一点?
4个回答

79
你可以使用^。它会考虑前面除了你输入的字符之外的所有字符。
所以如果你输入[^y],它将过滤除y以外的所有内容。针对你的情况,你可以这样做:
String value = string.replaceAll("[^0-9]","");

其中string是保存实际文本的变量!


\D 作为一个模式会缩短67%。 ;) - tchrist
是的,但效率要低得多。 - DaMainBoss
@DaMainBoss怎样包含负数呢?我的意思是,我需要用空格替换所有非正/负数的内容。该怎么做呢? - Pankaj Singhal
@PankajSinghal 负数以 - 开头,因此类似 [^-?0-9] 的表达式应该可以解决问题。其中的 -? 表示告诉正则表达式引擎,如果存在 - 则匹配它(0 或无)。 - DaMainBoss

28
String clean1 = string1.replaceAll("[^0-9]", "");
或者
String clean2 = string2.replaceAll("[^\\d]", "");

其中\d[0-9]字符类的快捷方式,或者

String clean3 = string1.replaceAll("\\D", "");

\D\d 类的否定形式(意思是 [^0-9]


10
string1 = string1.replaceAll("[^0-9]", "");
string2 = string2.replaceAll("[^0-9]", "");

3
这是Google Guava #CharMatcher的方式。
String alphanumeric = "12ABC34def";

String digits = CharMatcher.JAVA_DIGIT.retainFrom(alphanumeric); // 1234

String letters = CharMatcher.JAVA_LETTER.retainFrom(alphanumeric); // ABCdef

如果您只想匹配ASCII数字,请使用
String digits = CharMatcher.inRange('0', '9').retainFrom(alphanumeric); // 1234

如果你只关心匹配拉丁字母,请使用。
String letters = CharMatcher.inRange('a', 'z')
                         .or(inRange('A', 'Z')).retainFrom(alphanumeric); // ABCdef

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