我想使用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;
}
Run Code Online (Sandbox Code Playgroud)
这是我的主要内容:
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);
}
Run Code Online (Sandbox Code Playgroud)
Don*_*ows 30
最简单的方法是从字符串中删除所有括号,无论它们是否平衡.
String replaced = "(4+5)+6".replaceAll("[()]", "");
Run Code Online (Sandbox Code Playgroud)
正确地处理平衡需要解析(或者仅与有限深度匹配的真正丑陋的RE,或者具有重复的正则表达式替换的"聪明").在大多数情况下,这种复杂性是过度的; 可能有效的最简单的事情就是足够好.
你根本不能用正则表达式来做到这一点。它不会删除匹配的括号,只会删除第一个左括号和第一个右括号,然后您将无法从表达式中获得正确的结果。您需要一个表达式解析器。看看递归下降 ezpresssion 解析器、Dijkstra 调车场算法等。