2015-06-09 2 views
0

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

  1. Total volumes of A + Total volumes of B
  2. Total sales of A/Total sales of B
  3. Total Shipment of A - Total Shipment of B

Когда я получаю строку, я не знаю, какая операция присутствует в строке. Поэтому, используя regex, я хочу проанализировать каждое выражение в java, и я должен получить этот результат.

expression1 = Total volumes of A expression2 = Total volumes of B operator = +

Может кто-нибудь помочь мне с этим. Я хочу эффективный способ сделать это в java, есть 1000 таких выражений.

+1

Вы можете использовать [группа] (HTTP: //www.regular- expressions.info/brackets.html). – Pshemo

ответ

1

Как указано в @Pshemo, группы - это решение.

я сделал предположение о том, что символы оператора не являются частью операндов:

Pattern pattern = Pattern.compile("([\\w\\s]+)\\s+([+\\-/*])\\s+([\\w\\s]+)"); 

Matcher matcher = pattern.matcher("Total volumes of A + Total volumes of B"); 

if (matcher.matches()) { 
    System.out.println("operand 1: " + matcher.group(1)); 
    System.out.println("operator: " + matcher.group(2)); 
    System.out.println("operand 2: " + matcher.group(3)); 
} 

Выход:

operand 1: Total volumes of A 
operator: + 
operand 2: Total volumes of B 
+0

@Phhemo действительно, нам нужно только сбежать от '-', поскольку в противном случае это означало бы диапазон. –