我想要从一个字符串中去除除了a-z、A-Z和0-9之外的所有字符,因此我需要为Java的string.replaceAll(regex, "");
创建一个正则表达式。
原来的字符串看起来像这样:
MAX EUK_1334-PP/B+
新的字符串应该长成这样:MAXEUK1334PPB
可能有更简洁的正则表达式,但这个肯定可以工作:
string.replaceAll("[^a-zA-Z0-9]", "");
string.replaceAll("[^a-zA-Z0-9]+", "");
String test = "MAX EUK_1334-PP/B+";
test = test.replaceAll("[\\W_]", "");
System.out.println(test + "\n");
打印结果:
MAXEUK1334PPB
\W
也不匹配“_
”字符吗? - Donal Fellowsunexpected char: 'W'
和 Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
。 - Dominik和 OP 几乎一模一样,我已经尝试使用 Ramda 进行了这个操作。
const filteredString = R.replace (/[^a-zA-Z0-9 "-/]/g, '');
去除所有字符以外的内容(加上:“- /)。奇怪的是,如果没有使用构造函数,这个正则表达式不会删除点(.)。其他所有功能都能正常工作。
因此,对于 OP 应该是
const filteredString = R.replace (/([^a-zA-Z0-9])|(_)/g, '');
或者使用 RegExp 构造函数
const onlyChars = new RegExp ('([^a-zA-z0-9])|(_)', 'g');
const filteredString = R.replace (onlyChars, '');
使用方法:
const oldString = `MAX EUK_1334-PP/B+`;
filteredString (oldString); -> "MAXEUK1334PPB"
更新:我的错误,第一次应该写错了,因为点实际上被删除了。这个正则表达式不会删除的字符是“_”,所以我添加了它。
有些人忘记了"_"字符:
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没有首先尝试并在原始问题中发布他的尝试,那么他就在欺骗自己。这只是我的个人看法。
您可以使用字符的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)
)。
"24\7"
或"24\\7"
?前者包含字符2
、4
和ASCII码为7的响铃符。缺少反斜杠可能会解释你遇到的结果。 - stevevls