2011-06-04 85 views
21

我想去除一切,但,从字符串中的字符包括AZ,az和0-9,所以我需要创建Java的string.replaceAll(regex, "");正则表达式去除一切,但字符和数字

的旧字符串正规表达式是这样的:

MAX EUK_1334-PP/B+ 

新的字符串应该是这样的:

MAXEUK134PPB 

回答

60

有可能是一个更简洁的正则表达式,但是这肯定会工作:

string.replaceAll("[^a-zA-Z0-9]", ""); 
+2

+1快速回答。我没有在iPhone上快速输入我的答案;-) – 2011-06-04 20:05:41

+8

如果让它匹配多个字符,可能会更快,所以string.replaceAll(“[^ a-zA-Z0-9] +”,“”) 。 – MRAB 2011-06-04 20:20:30

+0

尝试过的字符串24 \ 7.Strangely它返回24.为什么? – sandy 2013-04-29 16:50:26

17
string.replaceAll("[^a-zA-Z0-9]+", ""); 
+0

@MRAB稍后提到我决定一次替换几个字符以获得更好的性能 – 2016-02-29 11:20:59

2
String test = "MAX EUK_1334-PP/B+";  
test = test.replaceAll("[\\W_]", ""); 
System.out.println(test + "\n"); 

打印结果:

MAXEUK1334PPB 
+0

您是否知道'\ W'与“_'”字符不匹配? – 2011-06-04 20:09:15

+0

这个正则表达式将包含想要的字符*加上*下划线。括号也是多余的。 – stevevls 2011-06-04 20:09:30

+0

这会导致'unexpected char:'W''和 '无效的转义序列(有效的转义序列是\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)' – 2011-06-04 20:14:00

1

有些人忘记了 “_” 字符:

String regex = "[_\\W]";

public class RegexFun2 { 
    public static void main(String[] args) { 
     String test = "MAX EUK_1334-PP/B+"; 

     String regex = "[_\\W]"; 

     String result = test.replaceAll(regex, ""); 
     System.out.println(result); 
    } 
} 

但是我仍然认为OP是在欺骗自己,并没有证明他先试了一下,然后在他原来的问题中发表了他的尝试。只是我2美分。

0

您可以使用ASCII值字符的:

while(!end of string){ 
    if(valueOfChar is between 48-57 or 65-90 or 97-122) 
      write it to your string 
} 

这可能会帮助,但我不知道你是否应该与replaceAll编写代码。 这两个replaceAll和此代码与相同的性能(O(n))工作。

相关问题