我正在尝试阅读.sln
文件,并在我的解决方案中提取包含.csproj
路径的字符串。
包含我要查找的信息的行如下所示:
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Project", "Project\Project.csproj", "{0DB516E6-4358-499D-BFBF-408F50A44E14}"
所以,这就是我想要的:
$projectsInFile = Select-String "$slnFile" -pattern '^Project'
$csprojectsNames = $projectsInFile -replace ".+= `"(\S*) `""
现在,$csprojectsName
包含我要查找的信息,还包含字符串的其余部分。
就像这样:
Project\Project.csproj", "{0DB516E6-4358-499D-BFBF-408F50A44E14}"
检索.csproj
文件名称的最佳方法是什么,而无需手动剪切其余字符串?
谢谢
答案 0 :(得分:3)
您可以做的是捕获整个字符串并在替换字符串中使用捕获组,从而删除不需要的部分。
git cat-file -p HEAD
第二个捕获组是$csprojectsNames = $projectsInFile -replace '.+= "(\S*) "(.*?)",.*"','$2'
后引号之间的数据。由于它是第二个捕获组,我们将整个替换为该组= "Project", "....."
。使用单引号可确保PowerShell不会尝试扩展变量。
更好的方法
您可以直接在'$2'
中使用[^"]*?\.csproj
,而无需进行辅助解析。这将匹配.csproj之前的所有内容,这不是一个引用,所以它不会太多。
答案 1 :(得分:0)
您可以使用组捕获文件路径,然后使用组的值作为替换值。例如:
$csprojectsNames = $projectsInFile -replace 'Project\(.*?\) = "Project", "(.*?)"', '$1'