2014-01-29 250 views
0

我有一個字符串String a =「(3e4 + 2e2)sin(30)」;我想表現爲a =「(3e4 + 2e2)* sin(30)」;正則表達式匹配並替換字符串之間的兩個字符

我無法爲此編寫正則表達式。

+0

'一個= a.replaceAll( 「\)罪」, 「)*罪」);' – anubhava

+0

以及如果我有一個字符串一個= 「(3E4 + 2E2)COS(30)」;我想有一個正則表達式的所有字符不只是罪惡或cos請幫助 –

+0

好的檢查下面的答案。 – 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

以及如果我有一個String 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糾正 –

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); 
相關問題