2017-04-21 62 views
-2

之間的文本我有一個字符串Java的正則表達式插入括號

a = "stringWithBraces()" 

我想創建以下字符串

"stringWithBraces(text)" 

如何實現這一目標使用正則表達式?

我嘗試這樣做:

a.replaceAll("\\(.+?\\)", "text"); 

但得到這樣的:

stringWithBraces() 
+3

'+'必須至少一次,你需要使用'匹配* '。 – Vallentin

+0

你的意思是你想實現這樣的東西:String first =「(abc)」; String myVariable =「def」;先成爲String =「abc(def)」? – Yahya

+2

爲什麼不使用文字替換? '.replace(「()」,「(」+ text +「)」)'?請注意''(「+ text +」)「'沒有任何問題。 –

回答

0

您可以使用此:

a = a.replaceAll("\\((.*?)\\)", "(text)"); 

必須更換括號之間的每一件事與(text)

+0

嗯我試圖避免「(」+變量+「)」 –

+0

你是什麼意思@user_mda? –

+0

我的問題中的'文字'是一個變量。所以我不想追加「(」+ variable +「)」,而只是用大括號替換變量 –

0

可以使用向前看符號,做這樣的事情:

(?<=\().*?(?=\)) 

Live Demo

因此這樣做:

String a = "stringWithBraces()"; 
a = a.replaceAll("(?<=\\().*?(?=\\))", Matcher.quoteReplacement("text")); 

System.out.println(a); 

輸出:

stringWithBraces(text) 

注意的是,關於replaceAll()然後replacement字符串有s青梅特別的性格。所以你應該最有可能使用Matcher.quoteReplacement()爲了逃避這些和安全。

+0

注意''text「'實際上是一個變量。而一個字符串變量可能包含特殊字符,這些字符會在替換模式中專門處理。 –

+0

@WiktorStribiżew謝謝忘了。現在已經修復了。 – Vallentin

0

這個怎麼樣:

String first = "abc()"; 
String myVariableString = "def"; 
first = first.substring(0, first.length()-1) 
          + myVariableString 
          + first.substring(first.length()-1, first.length()); 
System.out.println(first); 

這改變

"abc()" to "abc(def)" 

如果您想根據我的理解這個問題

0

+達到什麼樣的要求至少一個字符,在這裏添加的?意味着最短的匹配,所以「...(。)...(。)...」不會繼續找到。「)...(。」。

a.replaceAll("\\(.*?\\)", "(text)"); 

您可能打算使用replaceFirst;儘管我認爲不是。

你也可以讓點.匹配新行字符,對於MULT行匹配,使用 的DOT_ALL選項(?s)

a.replaceAll("(?s)\\(.*?\\)", "(text)");