繁体   English   中英

如何在java中使用正则表达式非捕获组进行字符串替换

[英]How to use regex non capturing group for string replace in java

我需要在新版本上更改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

有人可以帮我这个吗?

为什么不使用前瞻/后视呢?

它们是非捕获的,可以在这里轻松工作:

str = str
    .replaceAll(
        "(?<=\\[assembly: AssemblyVersion\\(\"\\d\\.\\d\\.).*(?=\"\\)\\])",      
        "4.0"
    );

作为后视的替代方案,您可以围绕要保留的内容使用捕获组,并在非捕获组中保留要替换的内容,或者根本不使用任何组:

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演示

这适用于您的情况:

str.replaceAll("(\\[assembly: AssemblyVersion\\(\"\\d\\.\\d\\.)(\\d\\.\\d)(\"\\)\\])", "$14.0$3");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM