繁体   English   中英

使用java regex从String中删除括号

[英]Remove parenthesis from String using java regex

我想使用Java正则表达式删除括号但我遇到错误No group 1请看我的代码并帮助我。

public String find_parenthesis(String Expr){
        String s;
        String ss;
        Pattern p = Pattern.compile("\\(.+?\\)");
        Matcher m = p.matcher(Expr);
        if(m.find()){
            s = m.group(1);
            ss = "("+s+")";
            Expr = Expr.replaceAll(ss, s);
            return find_parenthesis(Expr);
        }
        else
            return Expr;
    }

这是我的主要内容:

public static void main(String args[]){
    Calculator c1 = new Calculator();
    String s = "(4+5)+6";
    System.out.println(s);
    s = c1.find_parenthesis(s);
    System.out.println(s);
}

最简单的方法是从字符串中删除所有括号,无论它们是否平衡。

String replaced = "(4+5)+6".replaceAll("[()]", "");

正确地处理平衡需要解析(或者仅与有限深度匹配的真正丑陋的RE,或者具有重复的正则表达式替换的“聪明”)。 在大多数情况下,这种复杂性是过度的; 可能有效的最简单的事情是足够好的。

你想要的是: s = s.replaceAll("[()]","");

有关正则表达式的更多信息,请访问正则表达式教程

您收到错误是因为您的正则表达式没有任何组,但我建议您使用这种更简单的单行方法:

expr = expr.replaceAll("\\((.+?)\\)", "$1");

你根本不能使用正则表达式。 它不会删除匹配的括号,只是第一个左边和第一个右边,然后你将无法从表达式中获得正确的结果。 你需要一个表达式的解析器 浏览递归下降ezpresssion解析器,Dijkstra shunting-yard算法等。

正则表达式定义了一个由任何空格字符组成的字符类(\\ s,因为我们传入一个字符串而被转义为\\ s,因为我们传入一个字符串),一个短划线(因为短划线意味着在字符类的上下文中有特殊的东西而被转义),和括号。 试试工作代码。

phoneNumber.replaceAll("[\\s\\-()]", "");

我知道我已经很晚了。 但是,万一你还在寻找更好的答案。 如果要从字符串中删除打开和关闭括号,可以使用这样一个非常简单的方法:

String s = "(4+5)+6";
s=s.replaceAll("\\(", "").replaceAll("\\)","");

如果您使用此:

s=s.replaceAll("()", "");

您正在指示代码查找字符串中不存在的() 相反,您应该尝试单独删除括号。

要详细解释,请考虑以下代码:

String s = "(4+5)+6";
String s1=s.replaceAll("\\(", "").replaceAll("\\)",""); 
System.out.println(s1);
String s2 = s.replaceAll("()", "");
System.out.println(s2);

此代码的输出将是:

4 + 5 + 6

(4 + 5)6

另外,只有在需要regex时才使用replaceAll 在其他情况下, replace工作正常。 见下文:

String s = "(4+5)+6";
String s1=s.replace("(", "").replace(")","");

输出:

4 + 5 + 6

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM