我正在 powershell 中处理自动版本控制脚本,但在尝试从 AssemblyInfo.cs 文件中提取一行文本时遇到了障碍。但是,尽管我付出了所有努力,但我似乎无法让它按预期工作。
经过多次试验和错误以达到预期的结果,我发现以下内容接近我想要实现的目标:
# Constants
$Assembly = Get-Item "C:\generalfilepath\*\Assembly.cs"
$regex = '(?<!\/\/ \[assembly: AssemblyVersion\(")(?<=\[assembly: AssemblyVersion\(")[^"]*'
$CurrentVersion = GC $Assembly
$CurrentVersion = $CurrentVersion -match $regex
Write-Host "CurrentVersion = $CurrentVersion
我期待看到:CurrentVersion = 1.0.0.0
或类似的东西,但我得到的是:CurrentVersion = [assembly: AssemblyVersion("1.0.0.0")]
我一直在四处寻找有关如何在 PowerShell 中正确使用正则表达式的示例,但我还没有真正找到任何包含正则表达式本身以外的内容......因此,我希望这里有人可以帮助我指导我正确的方向或指出我做错了什么。
尽管使用了正则表达式过滤器,但我得到了整行而不是我想要的值。如何使用后视和前瞻正则表达式过滤器确保变量仅存储目标值?
你可以试试:
C:\> ([string] (Get-Content \AssemblyInfo.cs)) -match 'AssemblyVersion\("([0-9]+(\.([0-9]+|\*)){1,3}){1}"\)'
True
之后将结果存储在 $Matches[1]
C:\> $Matches[1]
6.589.0.123
要知道投的成绩Get-Content
来[string]
,否则$Matches
会$null
。有关完整说明,请参阅此答案。
如果您想使用更“贪婪”的正则表达式^\[assembly: AssemblyVersion\("([0-9]+(\.([0-9]+|\*)){1,3}){1}"\)
,其中还包括一个检查 ( ^\[assembly:
) 字符串开头的字符串,[assembly
您必须遍历[string[]]
数组Get-Content
返回:
> gc .\AssemblyInfo.cs | % { $_ -match '^\[assembly: AssemblyVersion\("([0-9]+(\.([0-9]+|\*)){1,3}){1}"\)' }
> $Matches[1]
6.589.0.*
希望有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句