我正在尝试编写PowerShell脚本来将我的.nuspec
文件(nuget depdency)更新为最新的构建版本。我遇到了通配符问题。
所以我想替换这一行的版本号
<dependency id="MyCompany.Common" version="1.0.0.0" />
到新的版本号,即版本2.2.2.2
<dependency id="MyCompany.Common" version="2.2.2.2" />
我目前的地方法看起来像这样。注意我需要一个通配符,因为我需要替换的解决方案中有多个nuget包,所有都遵循MyCompany.PackageName
的格式
$filecontent -replace 'id="MyCompany.*" version="*"', "$Version" | Out-File $file
但这实际上最终会创建
<dependency 2.2.2.21.0.0.0" />
如何修改我的正则表达式以确保它仅替换版本号组件?
答案 0 :(得分:4)
替换为
$filecontent -replace 'id="MyCompany(.*?)" version=".*?"', "id=`"MyCompany`$1`" version=`"$Version`"" | Out-File $file
答案 1 :(得分:2)
我简单地使用了一个捕获组,所以我不会失去你的正则表达式的特异性,只匹配&#39; MyCompany。*&#39;在id中,但并没有增加很多复杂性。我将所有内容捕获到版本中的开头报价,并使用新版本号替换下一个报价之前的任何内容。
$test='<dependency id="MyCompany.Common" version="1.0.0.0" />'
$newVersion='2.2.2.2'
$test -replace "(id=`"MyCompany`..*`" version=)`"[^`"]*","`$1`"$newVersion"
<dependency id="MyCompany.Common" version="2.2.2.2" />
在PS 4.0
Powershell奇怪和脆弱的部分包括:
反向提示而不是\
正则表达式必须是&#34;双引号&#34;
必须使用单引号或转义符才能使捕获组在替换字符串中起作用
答案 2 :(得分:1)
$s = '<dependency id="MyCompany.Common" version="2.2.2.2" />'
$s -replace 'version=".*"', 'version="1.2.3.4"'<dependency id="MyCompany.Common" version="1.2.3.4" />