2016-01-29 34 views
-1

我有SVG標記的字符串,其中包含的這些倍數裏面插入parentesis報價:如何使用正則表達式

url(#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100) 

,我需要他們這樣的:

url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100') 

與報價在括號內。

這些將在包含大量不同標記的長字符串中混合,因此需要非常準確。

+0

編輯您在離開評論 – Michael

+0

有一個「編輯」鏈接您的問題下方的代替問題... – Shaamaan

回答

1

您可以使用這樣的正則表達式:

\((.*?)\) 

隨着替換字符串('$1')

的想法是括號內捕捉一切並連接了'

所以,你可以使用一個代碼像這樣:

String str = "url(#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100)"; 
str = str.replaceAll("\\((.*?)\\)", "('$1')"); 

//Outuput: url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100') 

IdeOne example

如果你想有一個更好的表現正則表達式,你可以使用:

str = str.replaceAll("\\(([^)]*)\\)", "('$1')"); 
+0

@frederico謝謝你的回覆......它只需要在前面有url的圓括號就可以了,所以只能打url()而不要rgb() –

+0

@DavidJohnson在你的例子中我沒有看到其他括號。無論如何,看到你接受了答案。希望能幫到 –

+0

我確實說過'這些會混在一個包含很多不同標記的長字符串中,因此需要非常準確。所以在這個標記裏面是其他括號 –

0

ReplaceAll刪除字符串的一部分,而是放置一個不相關且不變的新東西。

因爲替換字符串可以是不一樣的,在兩側,唯一的解決辦法我想象(使用正則表達式和ReplaceAll的約束)是做在兩個時間:

String Str = "url(#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100)"; 
Str = Str.replaceAll("\\(", "('"); // replace left parenthesis 
Str = Str.replaceAll("\\)", "')"); // replace right parenthesis 

System.out.print("Return Value: " + Str); 
// Return Value: url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100') 

你可以測試它here

+0

'新字符串(「」)'是[代碼氣味](http://stackoverflow.com/questions/334518/java-strings-string-s-new-stringsilly)。 – nickb

+0

@nickb,我修好了。我的java有點生鏽。 – Orace

+0

好的謝謝你的答覆...你不必使用正則表達式和replaceAll,如果有更好的方法? –