java - 从字符串中删除一组特殊字符

标签 java regex

我需要从字符串中删除一组特殊字符(即 []'?!+-.,)。 典型的排他解决方案 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/

相关文章:

Java:使用类作为 hashmap 中的值

php - 为什么 preg_match 不起作用?

php - Apache 重写 - 本地主机中的干净 URL

java - Ubuntu 上 Eclipse Java ADT 的菜单栏问题

java - 交换数组中的引用

java - JUnit - 测试创建的最大对象数

java - 使用多个随机换行创建新字符串

regex - 仅当表达式在 apache Camel 选择中起作用时才第一次?

java - 使用Java使用正则表达式查找更大字符串的子字符串

regex - 如何否定正则表达式?