2014-01-30 3 views
0

скобок у меня есть некоторые выражения & Мне нужно извлечь все из них говорят в списокRegex для соответствия содержания после

Example       Output 
(A + B)/(C + D)+(E/F)   {(A + B),/, (C + D), +, (E/F) } 
(A + B)/(C + D)     (A + B), /, (C + D) 

Мне нужно, чтобы операторы, которые тоже находятся вне скобок.

Я использовал это, но это только получает данные в скобках

Pattern p = Pattern.compile("(\\(.*?\\))"); 
Matcher m = p.matcher(exp7); 
List<String> expressions = new ArrayList<String>(); 
while(m.find()) 
{ 
    expressions.add(m.group()); 
} 

Кроме того, если у меня есть выражение типа

(A/B) + C мне нужно получить {(A/B), +, C}

, используя выше шаблон я могу только извлекать (A/B). Может ли быть регулярное выражение для получения всех данных для вышеупомянутых типов выражений.

+6

Никогда не разбирайте математическое выражение с регулярным выражением, особенно с двигателем, который не оснащен функцией, чтобы сделать это ... – nhahtdh

+0

@nhahtdh: О, я вижу, к чему вы клоните. Хорошо знать. Есть ли другой способ получить вышеупомянутый вывод? – SilentCoder

+0

http://en.wikipedia.org/wiki/Shunting_yard_algorithm – nhahtdh

ответ

0

Я знаю, как решить эту проблему в два этапа:

Шаг1.

шаблон поиска:

(\([^\(^\)]*\)|[^\(^\)]+) 

заменить:

\1, 

результат:

(A + B)/(C + D)+(E/F) (A + B),/,(C + D),+,(E/F), 
(A + B)/(C + D)   (A + B),/,(C + D),  

Шаг 2.

Избавьтесь от ненужной запятой в конце. Добавьте '{' и '}'.

+0

, вызывая ошибку в регулярном выражении. некоторый символ не экранирован. – SilentCoder

+3

Регулярное выражение лучше записывается как '(\ ([^()] * \) | [^()] +)' или цитируется '' (\\ ([^()] * \\) | [^() ] +) ", но вызовет проблемы, когда есть вложенные скобки, например' ((A + (B))/(C + D)) ' – sln

+0

@sln: как насчет оценки этого выражения (A/B) + C? Можно ли обновить регулярное выражение для оценки выражения выше? – SilentCoder

Смежные вопросы