正则表达式替换程序集版本的最后两位数字
regex to replace last two digits of an assemblyversion
我正在使用 teamcity 和一个 C# 项目,我想使用文件内容修补程序替换程序集版本中的最后两位数字(例如:[assembly: AssemblyVersion("1.0.*.*")]
中的两颗星)。我在文件内容修补程序上找到了文档,如果您只想更改最后一位数字,它建议使用
(^\s*\[\s*assembly\s*:\s*((System\s*\.)?\s*Reflection\s*\.)?\s*AssemblyVersion(Attribute)?\s*\(\s*@?\")(([0-9\*]+\.)+)[0-9\*]+(\"\s*\)\s*\])
,这让我中途去了。
我想如果我这样做 (^\s*\[\s*assembly\s*:\s*((System\s*\.)?\s*Reflection\s*\.)?\s*AssemblyVersion(Attribute)?\s*\(\s*@?\")(([0-9\*]+(\.))+)[0-9\*]+(\"\s*\)\s*\])
它会捕捉到最后一个时期,因为它是自己的一组,让我可以毫无问题地更换两颗星。然而,看起来第一颗星仍然被捕获在带有 1.0 的组中(因此该组变为 1.0.*.)。
我想要的是限制第一组捕获{major}.{minor}。然后让最后一段成为自己的小组,这样我就可以做类似的事情:\%build.number%%build.vcs.number%
这会给我 AssemblyVersion("1.0.{build#}.{vcs#}")]
一般来说,我可以顺利通过正则表达式而不会遇到很多问题,但过去几个小时我一直在研究这个问题,但我似乎无法正确理解。他将不胜感激有关得出此结论的任何信息。
我会先提取1.0.*.*
,然后再使用Version.Parse
。
更小的正则表达式(并且可以缩短更多)..
string input = @"[assembly:AssemblyVersion(""1.2.3.4"")]";
var verStr = Regex.Match(input, @"\[.+?\(\""(.+?)\""\)\]").Groups[1].Value;
var version = Version.Parse(verStr);
如果您想在 验证 的同时继续使用您找到的解决方案进行替换,您可以使用
(^\s*\[\s*assembly\s*:\s*((System\s*\.)?\s*Reflection\s*\.)?\s*AssemblyVersion(Attribute)?\s*\(\s*@?\")([0-9\*]+\.[0-9\*]+)\.([0-9\*]+\.[0-9\*]+)(\"\s*\)\s*\])
并替换为 .%build.number%.%build.vcs.number%
。
我刚刚将 ([0-9\*]+(\.))+
展开为 ([0-9\*]+\.[0-9\*]+)\.([0-9\*]+\.[0-9\*]+)
,2 组 (([0-9\*]+\.[0-9\*]+)
) 用文字点 (\.
) 分隔。我还必须删除遵循 ([0-9\*]+(\.))+
模式的 [0-9\*]+
。
我正在使用 teamcity 和一个 C# 项目,我想使用文件内容修补程序替换程序集版本中的最后两位数字(例如:[assembly: AssemblyVersion("1.0.*.*")]
中的两颗星)。我在文件内容修补程序上找到了文档,如果您只想更改最后一位数字,它建议使用
(^\s*\[\s*assembly\s*:\s*((System\s*\.)?\s*Reflection\s*\.)?\s*AssemblyVersion(Attribute)?\s*\(\s*@?\")(([0-9\*]+\.)+)[0-9\*]+(\"\s*\)\s*\])
,这让我中途去了。
我想如果我这样做 (^\s*\[\s*assembly\s*:\s*((System\s*\.)?\s*Reflection\s*\.)?\s*AssemblyVersion(Attribute)?\s*\(\s*@?\")(([0-9\*]+(\.))+)[0-9\*]+(\"\s*\)\s*\])
它会捕捉到最后一个时期,因为它是自己的一组,让我可以毫无问题地更换两颗星。然而,看起来第一颗星仍然被捕获在带有 1.0 的组中(因此该组变为 1.0.*.)。
我想要的是限制第一组捕获{major}.{minor}。然后让最后一段成为自己的小组,这样我就可以做类似的事情:\%build.number%%build.vcs.number%
这会给我 AssemblyVersion("1.0.{build#}.{vcs#}")]
一般来说,我可以顺利通过正则表达式而不会遇到很多问题,但过去几个小时我一直在研究这个问题,但我似乎无法正确理解。他将不胜感激有关得出此结论的任何信息。
我会先提取1.0.*.*
,然后再使用Version.Parse
。
更小的正则表达式(并且可以缩短更多)..
string input = @"[assembly:AssemblyVersion(""1.2.3.4"")]";
var verStr = Regex.Match(input, @"\[.+?\(\""(.+?)\""\)\]").Groups[1].Value;
var version = Version.Parse(verStr);
如果您想在 验证 的同时继续使用您找到的解决方案进行替换,您可以使用
(^\s*\[\s*assembly\s*:\s*((System\s*\.)?\s*Reflection\s*\.)?\s*AssemblyVersion(Attribute)?\s*\(\s*@?\")([0-9\*]+\.[0-9\*]+)\.([0-9\*]+\.[0-9\*]+)(\"\s*\)\s*\])
并替换为 .%build.number%.%build.vcs.number%
。
我刚刚将 ([0-9\*]+(\.))+
展开为 ([0-9\*]+\.[0-9\*]+)\.([0-9\*]+\.[0-9\*]+)
,2 组 (([0-9\*]+\.[0-9\*]+)
) 用文字点 (\.
) 分隔。我还必须删除遵循 ([0-9\*]+(\.))+
模式的 [0-9\*]+
。