我想去除一切,但,从字符串中的字符包括AZ,az和0-9,所以我需要创建Java的string.replaceAll(regex, "");
正则表达式去除一切,但字符和数字
的旧字符串正规表达式是这样的:
MAX EUK_1334-PP/B+
新的字符串应该是这样的:
MAXEUK134PPB
我想去除一切,但,从字符串中的字符包括AZ,az和0-9,所以我需要创建Java的string.replaceAll(regex, "");
正则表达式去除一切,但字符和数字
的旧字符串正规表达式是这样的:
MAX EUK_1334-PP/B+
新的字符串应该是这样的:
MAXEUK134PPB
有可能是一个更简洁的正则表达式,但是这肯定会工作:
string.replaceAll("[^a-zA-Z0-9]", "");
string.replaceAll("[^a-zA-Z0-9]+", "");
@MRAB稍后提到我决定一次替换几个字符以获得更好的性能 – 2016-02-29 11:20:59
String test = "MAX EUK_1334-PP/B+";
test = test.replaceAll("[\\W_]", "");
System.out.println(test + "\n");
打印结果:
MAXEUK1334PPB
您是否知道'\ W'与“_'”字符不匹配? – 2011-06-04 20:09:15
这个正则表达式将包含想要的字符*加上*下划线。括号也是多余的。 – stevevls 2011-06-04 20:09:30
这会导致'unexpected char:'W''和 '无效的转义序列(有效的转义序列是\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)' – 2011-06-04 20:14:00
有些人忘记了 “_” 字符:
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美分。
您可以使用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)
)工作。
+1快速回答。我没有在iPhone上快速输入我的答案;-) – 2011-06-04 20:05:41
如果让它匹配多个字符,可能会更快,所以string.replaceAll(“[^ a-zA-Z0-9] +”,“”) 。 – MRAB 2011-06-04 20:20:30
尝试过的字符串24 \ 7.Strangely它返回24.为什么? – sandy 2013-04-29 16:50:26