我要求在新版本上更改AssemblyVersion
。我使用java代码string.replaceAll(regexPattern,updatedString);
此代码适用于普通正则表达式模式,但我无法在此模式中使用非捕获组。我想使用非捕获组来确保我不会捕获非必需的模式。这是我试过的代码:
String str="[assembly: AssemblyVersion(\"1.0.0.0\")]";
str=str.replaceAll("(?:\\[assembly: AssemblyVersion\\(\"\\d\\.\\d\\.)?.*(?:\"\\)\\])?", "4.0");
System.out.println(str);
在这里,我想匹配字符串[assembly: AssemblyVersion(int.int)]
并仅替换次要版本。
预期结果为[assembly: AssemblyVersion("1.0.4.0")]
,但我的结果为4.04.0
。
有人可以帮我吗?
答案 0 :(得分:6)
为什么不使用looka-head / look-behind呢?
它们是非捕获的,可以在这里轻松工作:
str = str
.replaceAll(
"(?<=\\[assembly: AssemblyVersion\\(\"\\d\\.\\d\\.).*(?=\"\\)\\])",
"4.0"
);
答案 1 :(得分:1)
作为后视的替代方案,您可以围绕要保留的内容使用捕获组,并在非捕获组中保留要替换的内容,或者根本不保留任何组:
String str="[assembly: AssemblyVersion(\"1.0.0.0\")]";
str=str.replaceAll("(\\[assembly:\\s*AssemblyVersion\\(\"\\d+\\.\\d+\\.)\\d+\\.\\d+(?=\"\\)\\])", "$014.0");
System.out.println(str);
请参阅IDEONE demo
答案 2 :(得分:0)
这适用于您的情况:
str.replaceAll("(\\[assembly: AssemblyVersion\\(\"\\d\\.\\d\\.)(\\d\\.\\d)(\"\\)\\])", "$14.0$3");