我需要从字符串中删除一组特殊字符(即 []'?!+-.,
)。
典型的排他解决方案 replaceAll("[^a-zA-Z0-9]", "")
是不行的,因为我只需要删除这些字符,并保存包含希腊字符的文本。例如:
public static void test_regex() {
ArrayList<String> tests = new ArrayList<>();
tests.add("------.");
tests.add("+[---].");
tests.add("------?");
tests.add("---]〛");
tests.add("A++[---].");
tests.add("AV[---]S");
for (String s : tests) {
String becomes = s.replaceAll("[.-\\\\,]", "");
System.out.println(s + " becomes <" + becomes + ">");
}
}
应该作为输出给出
------. becomes <>
+[---]. becomes <>
------? becomes <>
---]〛 becomes <>
A++[---]. becomes <A>
AV[---] becomes <AV>
但我不能。我成功使用 [.-]
删除了 .
和 -
,但随后添加了 \\[
并中断一切(也尝试过 \\\\[
或 \\\\\\[
) ,之前工作的 .
也不再工作.
哪种方式可以转义这些字符?
最佳答案
您可以使用以下正则表达式替换来删除所有不需要的字符:
String becomes = s.replaceAll("[ \\]\\[.\\\\,+?-]+", "");
- 您需要在字符类中包含所有其他不需要的字符,例如
[, ], +, ?, |
等。 - 最好在此处使用量词
+
以获得更好的性能。 - 请记住在字符类的第一个或最后一个位置放置一个未转义的连字符。
关于java - 从字符串中删除一组特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49979566/