Java 用于在忽略括号时拆分字符串的正则表达式';内容

Java 用于在忽略括号时拆分字符串的正则表达式';内容,java,regex,Java,Regex,我有一个表达式,我想用操作符拆分,它位于两对括号之间,没有与括号中的操作符交互。例如: "(z/(2+t))/((2.0+var)*(x/y))" 应成为: ["(z/(2+t))", "/", "((2.0+var)*(x/y))"] 我已尝试使用以下正则表达式: ((?<=[+*/\\-])|(?=[+*/\\-]))(?![^(]*[)]) 可能有助于您将它们分开: .+\)(\/)\(.+ 它在中间创建一个单独的组,其中包括第一个/. 我相信有一个比这更清晰的答案,但这应该

我有一个表达式,我想用操作符拆分,它位于两对括号之间,没有与括号中的操作符交互。例如:

"(z/(2+t))/((2.0+var)*(x/y))"
应成为:

["(z/(2+t))", "/", "((2.0+var)*(x/y))"]
我已尝试使用以下正则表达式:

((?<=[+*/\\-])|(?=[+*/\\-]))(?![^(]*[)])
可能有助于您将它们分开:

.+\)(\/)\(.+
它在中间创建一个单独的组,其中包括第一个/.

我相信有一个比这更清晰的答案,但这应该可以解决问题:

  import java.util.*;

  public class JavaFiddle
  {
    public static void main(String[] args)
    {
      // starting here with the result of your regex operation
      String[] yourOutputArray = {"(z", "/", "(2+t))", "/", "((2.0+var)", "*", "(x/y))"};

      List<String> listy = new ArrayList<String>();
      String s = "";
      for(int i = 0; i < yourOutputArray.length; i++){
          s += yourOutputArray[i];

          if(characterCount(s,"(") > 0 && characterCount(s,"(") == characterCount(s,")")){
              listy.add(s);
              s = "";
          }else if(s.length() > 0 && characterCount(s,"(") == 0){
              // this must be an operator we want to split on
              listy.add(s);
              s = "";
          }
      }

      // listy is the result you are looking for
      System.out.println(listy); // [(z/(2+t)), /, ((2.0+var)*(x/y))]
    }

    public static int characterCount(String input, String character){
        return input.length() - input.replace(character, "").length();
    }
  }
import java.util.*;
公共类小提琴
{
公共静态void main(字符串[]args)
{
//从这里开始,使用正则表达式操作的结果
字符串[]yourOutputArray={“(z)”,“/”,“(2+t)),“/”,“((2.0+var)”,“*”,“(x/y))”;
List listy=new ArrayList();
字符串s=“”;
for(int i=0;i0&&characterCount,“(”==characterCount,”)){
listy.add(s);
s=“”;
}如果(s.length()>0&&characterCount(“”==0),则为else{
//这一定是我们要拆分的运算符
listy.add(s);
s=“”;
}
}
//利斯蒂是你想要的结果
System.out.println(listy);//[(z/(2+t)),/,((2.0+var)*(x/y))]
}
公共静态整型字符计数(字符串输入,字符串字符){
返回input.length()-input.replace(字符“”).length();
}
}

实际上,我希望看到它更灵活,不仅是在这个特殊情况下,而且好像可以有任何一组运算符2*((a-b)+(b*(a+10));(2+a)-(2*a)+(b*(c*c))返回
[“2”、“*”、“((a-b)+(b*(a+10))”]
[(2+a)”、“-”、“(2*a)”、“+”、“(b*”、“(b*(c))]
,但实际上可以有任意数量的复杂表达式包含更简单的表达式
  import java.util.*;

  public class JavaFiddle
  {
    public static void main(String[] args)
    {
      // starting here with the result of your regex operation
      String[] yourOutputArray = {"(z", "/", "(2+t))", "/", "((2.0+var)", "*", "(x/y))"};

      List<String> listy = new ArrayList<String>();
      String s = "";
      for(int i = 0; i < yourOutputArray.length; i++){
          s += yourOutputArray[i];

          if(characterCount(s,"(") > 0 && characterCount(s,"(") == characterCount(s,")")){
              listy.add(s);
              s = "";
          }else if(s.length() > 0 && characterCount(s,"(") == 0){
              // this must be an operator we want to split on
              listy.add(s);
              s = "";
          }
      }

      // listy is the result you are looking for
      System.out.println(listy); // [(z/(2+t)), /, ((2.0+var)*(x/y))]
    }

    public static int characterCount(String input, String character){
        return input.length() - input.replace(character, "").length();
    }
  }