【发布时间】:2011-09-08 12:06:59
【问题描述】:
我想从字符串中删除除字符 a-z、A-Z 和 0-9 之外的所有内容,因此我需要为 Java 的 string.replaceAll(regex, ""); 创建一个正则表达式
旧字符串如下所示:
MAX EUK_1334-PP/B+
新字符串应如下所示:
MAXEUK1334PPB
【问题讨论】:
我想从字符串中删除除字符 a-z、A-Z 和 0-9 之外的所有内容,因此我需要为 Java 的 string.replaceAll(regex, ""); 创建一个正则表达式
旧字符串如下所示:
MAX EUK_1334-PP/B+
新字符串应如下所示:
MAXEUK1334PPB
【问题讨论】:
可能有更简洁的正则表达式,但这肯定会起作用:
string.replaceAll("[^a-zA-Z0-9]", "");
【讨论】:
"24\7"还是"24\\7"?前者是字符2、4和ASCII字符7(铃)。缺少反斜杠肯定可以解释您的结果。
string.replaceAll("[^a-zA-Z0-9]+", "");
【讨论】:
String test = "MAX EUK_1334-PP/B+";
test = test.replaceAll("[\\W_]", "");
System.out.println(test + "\n");
打印结果:
MAXEUK1334PPB
【讨论】:
\W 也不匹配“_”字符吗?
unexpected char: 'W' 和Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
有些人忘记了“_”字符:
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))。
【讨论】: