我正在使用teamcity和C#项目,我想使用文件内容修补程序替换assemblyversion中的最后两位数字(例如:[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}。然后让最后一个时期成为它自己的小组,这样我就可以做一些事情:$1$5\%build.number%$7%build.vcs.number%$8
这会给我AssemblyVersion("1.0.{build#}.{vcs#}")]
一般来说,我可以在没有太多问题的情况下偶然发现正则表达式,但我在过去的几个小时里一直在研究这个问题,而我似乎无法理解它。有关达成这一结论的任何信息,他都会表示赞赏。
答案 0 :(得分:2)
如果你想在验证的同时继续使用你发现要替换的解决方案,你可以使用
(^\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*\])
并替换为$1$5.%build.number%.%build.vcs.number%$7
。
请参阅regex demo
我刚刚将([0-9\*]+(\.))+
展开到([0-9\*]+\.[0-9\*]+)\.([0-9\*]+\.[0-9\*]+)
,用文字点(([0-9\*]+\.[0-9\*]+)
)分隔的2个组(\.
)。我还必须删除[0-9\*]+
模式后面的([0-9\*]+(\.))+
。
答案 1 :(得分:1)
我首先提取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);