RegEx для разделения строки при игнорировании содержимого скобок - PullRequest
1 голос
/ 19 апреля 2019

У меня есть выражение, которое я хочу разделить по операторам, которое расположено между двумя парами скобок без взаимодействия с операторами в них.Например:

"(z/(2+t))/((2.0+var)*(x/y))"

Должен стать:

["(z/(2+t))", "/", "((2.0+var)*(x/y))"]

Я попытался использовать следующее RegEx:

((?<=[+*/\\-])|(?=[+*/\\-]))(?![^(]*[)])

Но расщепление происходит между внутренними выражениями:

["(z", "/", "(2+t))", "/", "((2.0+var)", "*", "(x/y))"]

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

Я уверен, что есть намного более чистый ответ, чем этот, но это должно сделать работу:

  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();
    }
  }
0 голосов
/ 19 апреля 2019

Этот RegEx может помочь вам разделить их:

.+\)(\/)\(.+

Создает одну группу в середине, которая включает в себя первую / .

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...