从字符串

时间:2018-04-23 11:04:14

标签: 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>

但我不能。我成功删除了.- [.-],但随后我添加了\\[并打破了所有内容(也尝试了\\\\[\\\\\\[),还有工作前的.不再工作了。

以哪种方式逃避这些角色?

1 个答案:

答案 0 :(得分:4)

您可以使用以下正则表达式替换来删除所有不需要的字符:

String becomes = s.replaceAll("[ \\]\\[.\\\\,+?-]+", "");
  • 您需要在角色类中包含所有其他不需要的字符,例如[, ], +, ?, |等。
  • 最好在这里使用量词+以获得更好的效果。
  • 请记住在字符类的第一个或最后一个位置放置未转义的连字符。