我正在尝试读取.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
文件名的最佳方法是什么?谢谢
最佳答案
您可以执行的操作是捕获整个字符串,并在替换字符串中使用捕获组,从而删除不需要的部分。
$csprojectsNames = $projectsInFile -replace '.+= "(\S*) "(.*?)",.*"','$2'
第二个捕获组是
= "Project", "....."
后面的引号之间的数据。由于这是第二个捕获组,因此我们将整个替换为该组'$2'
。使用单引号确保PowerShell不会尝试扩展变量。更好的方法
您可能可以直接在
[^"]*?\.csproj
中使用select-string
,而无需进行辅助解析。这将匹配.csproj之前的所有内容(而不是引号),因此不会出现太多问题。
关于regex - 正则表达式-在Powershell中替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31616531/