【发布时间】:2017-11-14 15:03:40
【问题描述】:
问题
我正在处理 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 中正确使用正则表达式的示例,但我并没有真正找到任何包含正则表达式本身以外的内容......因此,我希望这里有人可以帮助我引导我朝着正确的方向前进,或者指出我做错了什么。
问题
尽管使用了正则表达式过滤器,但我得到的是整行而不是我想要的值。如何使用lookbehind 和lookahead regex 过滤器确保变量仅存储目标值?
【问题讨论】:
-
Get-Content返回一个行数组,-match在行数组上过滤匹配正则表达式的行。不清楚您是否期待一个文件,因为您在路径中使用了通配符,但无论如何您都需要在使用-match后引用$Matches以获取匹配详细信息。可能Get-Content -Raw得到一个字符串,然后-match然后$matches[1]
标签: regex powershell lookahead lookbehind