2016-01-29 32 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,如果有更好的方法? –