Java 如何使用正则表达式在括号内插入引号
我有一个SVG标记字符串,其中包含以下内容的倍数:Java 如何使用正则表达式在括号内插入引号,java,regex,Java,Regex,我有一个SVG标记字符串,其中包含以下内容的倍数: 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') \((.*?)\) String str = "url(#586-xr___83_193_101__rgba_243_156_18_1
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')
\((.*?)\)
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')
括号内带引号
这些内容将混合在一个包含许多不同标记的长字符串中,因此需要非常准确。
ReplaceAll
删除字符串的一部分,并放置一个不相关且不变的新内容
因为替换字符串不能在两侧都相同,所以我想象的唯一解决方案(在使用RegEx和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')
您可以测试它。您可以使用如下正则表达式:
url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100')
\((.*?)\)
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')
使用替换字符串(“$1”)
其思想是捕获括号内的所有内容,并将“
因此,您可以使用如下代码:
url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100')
\((.*?)\)
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')
如果您想要性能更好的正则表达式,可以使用:
str = str.replaceAll("\\(([^)]*)\\)", "('$1')");
编辑你的问题而不是留下评论在你的问题下面有一个“编辑”链接…
newstring(“”
is)。@nickb,我修复了它。我的java有点生锈。好的,谢谢你的回复…如果有更好的方法,你不必使用regex和replaceAll?@frederico谢谢你的回复…它只需要对前面有url的括号执行,所以只需点击url()而不是rgb()@DavidJohnson我在你的示例中没有看到其他括号。不管怎样,我看到你接受了答案。希望能有所帮助我确实说过‘这些将混合在一个包含许多不同标记的长字符串中,因此需要非常准确。’所以在这个标记中是另一个parentheses@DavidJohnson对不起,我明白了。。。在这种情况下,您可以使用以下行:str=str.replaceAll(“\\(.*)\”,“(“$1”)”
使正则表达式变得贪婪。请记住,此正则表达式将url
视为最大的节点。如果这对您不起作用,那么就不能使用regex.str.replaceAll(“\(.*)”,“('$1')”)只获取整个字符串中的第一个和最后一个括号