我正在尝试使用guids
在.sln
文件中检索项目的regular expressions
因此,例如,如果我在文件中有一个像这样的项目:
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SomeProject", "SomeProject\SomeProject.csproj", "{F5EF941A-49AD-404D-9EB1-209A75D4113F}"
EndProject
我会在脚本中执行以下操作:
$projectsInSolution = Select-String "$file" -pattern 'Project'
$lineProjectsInFile = $projectsInSolution -match " `"{\S*}"
在正则表达式中,我离开了空格,因为真正的GUID是
F5EF941A-49AD-404D-9EB1-209A75D4113F
但是,当我运行它时,我得到
C:\...\...\...\....sln:6:Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SomeProject",
"SomeProject\SomeProject.csproj", "{F5EF941A-49AD-404D-9EB1-209A75D4113F}"
为什么我不只得到GUID?
我在regexr.com中测试了它,看来工作正常
谢谢
编辑
这就是我现在正在做的。但是什么也没得到
$projectsInSolution = Select-String "$solutionFileStr" -pattern 'Project'
$lineProjectsInFile = $projectsInSolution -match "(?<={)[^}]+(?=}`"\s*EndProject)"
ForEach($line in $lineProjectsInFile)
{
Write-Output "$line"
}
最佳答案
我认为您的问题不在于RegEx,而在于您的运行方式。您的Select-String
命令输出一个Microsoft.PowerShell.Commands.MatchInfo
对象,因此您想要匹配的是Line
属性。另外,如果您只需要GUID,我将使用-Replace,并将GUID设为捕获组,然后将整个行替换为捕获组。像这样:
$file = 'c:\temp\test.txt'
$projectsInSolution = Select-String "$file" -pattern '^Project'
$lineProjectsInFile = $projectsInSolution.line -replace "^.+ `"{(\S*)}.*$", '$1'
这将导致
$lineProjectsInFile
包含只是项目GUID的字符串数组。
关于.net - Powershell中的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31524112/