2014-01-29 3 views
0

У меня есть строка String a = "(3e4 + 2e2) sin (30)"; и я хочу показать его как a = "(3e4 + 2e2) * sin (30)";regex для соответствия и замены двух символов между строкой

Я не могу написать для этого регулярное выражение.

+0

'а = a.replaceAll ("\) грех", ") * грех");' – anubhava

+0

и что, если у меня есть строка = "соз (3E4 + 2E2) (30)"; Я хочу иметь регулярное выражение для всех символов, а не только грех или cos, пожалуйста, помогите –

+0

ok проверьте мой ответ ниже. – anubhava

ответ

1

Попробуйте replaceAll:

a = a.replaceAll("\) *(\\w+)", ")*$1"); 
+0

вы можете объяснить это немного, пожалуйста, почему мы используем \\ w + и что такое $ 1 и * (\\ w +) –

+0

'\\ w +' для соответствия любому слову после ')' и '$ 1' является обратной ссылкой это слово (захваченная группа № 1) в заменяющей строке. – anubhava

+0

* (\\ w +) и почему вы положили закрытие после некоторого пространства? –

0

Вы можете пойти с этим

String func = "sin";// or any function you want like cos. 
String a = "(3e4+2e2)sin(30)"; 
a = a.replaceAll("[)]" + func, ")*siz"); 
System.out.println(a); 
+0

и что, если у меня есть строка a = "(3e4 + 2e2) cos (30)"; Я хочу иметь регулярное выражение для всех символов, а не только грех или cos, пожалуйста, помогите –

+0

Вам нужно сохранить свою функцию в переменной, а затем выполнить команду replaceAll. см. обновления в моем ответе. – Salah

+0

Я хочу только) изменится с) * не будет символов после и только тех), которые перед любым символом или цифрой –

0

Я не пробовал, но должно работать

String a = "(3e4+2e2)sin(30)"; 
a = a.replaceAll("[)](\\w+)", ")*$1"); 
System.out.println(a); 
+0

показывает результат "(3e4 + 2e2) * 1 (30)" –

+0

Я принимаю синтаксис регулярного выражения в java corrected –

0

это должно работать

a = a.replaceAll("\\)(\\s)*([^*+/-])", ") * $2"); 
0
String input = "(3e4+2e2)sin(30)".replaceAll("(\\(.+?\\))(.+)", "$1*$2"); //(3e4+2e2)*sin(30) 
0

Если предположить, что символы в первых скобках всегда будет в аналогичной схеме, вы можете разделить эту строку на две части в месте, где вы хотели бы, чтобы вставить символ, а затем образуют конечную строку, присоединяя первую половину строки, нового символа и второй половины строки.

 string a = "(3e4+2e2)sin(30)"; 

     string[] splitArray1 = Regex.Split(a, @"^\(\w+[+]\w+\)"); 
     string[] splitArray2 = Regex.Split(a, @"\w+\([0-9]+\)$"); 

     string updatedInput = splitArray2[0] + "*" + splitArray1[1]; 

     Console.WriteLine("Input = {0} Output = {1}", a, updatedInput); 
Смежные вопросы