2013-09-16 11 views
2

Допустит, у меня есть следующие выражения:Regex для захвата поплавка из строки (и заменить захваченный поплавок)

2^3+4 
5*3 + log(9) + 32/4 - 2.1^5 
44 - 22 + sin(30)*2.34 + 51.32^4 + 17*32/11 

Я хочу найти и захватить до числа «^», а после, а затем заменить он с Math.pow (capture1, capture2); так струны будет как:

Math.pow(2,3)+4 
5*3 + log(9) + 32/4 - Math.pow(2.1,5) 
44 - 22 + sin(30)*2.34 + Math.pow(51.32,4) + 17*32/11 

Он должен быть совместим с Java регулярных выражений.

Мои мысли по этому поводу:

поиск:

(.*\d(\.\d)?)\^(.*\d(\.\d)?) 

Заменить:

Math.pow(\1,\2) 

Спасибо заранее.

ответ

4
String result = subject.replaceAll("(-?\\d+(?:\\.\\d+)?)\\^(-?\\d+(?:\\.\\d+)?)", "Math.pow($1,$2)"); 
+2

Как насчет отрицательных чисел и составных выражений в круглых скобках? Мы не заботимся о них? – gramonov

+0

Вы правы насчет отрицательных чисел, конечно. Вопрос был только о числах, а не о составных выражениях - в таком случае регулярные выражения не являются правильным решением. –

+0

Чувак, ты бог регулярности! Спасибо –

1

Вы используете неправильную технологию для этой работы. Вам нужен сканер и парсер выражений. Что, если они не цифры? Что делать, если они являются подвыражениями, например. log(9)^sin(2)? Что делать, если они в скобках? Несколько круглых скобок?

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