正则表达式 - 替换在Powershell中

时间:2015-07-24 17:34:34

标签: regex powershell replace

我正在尝试阅读.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文件名称的最佳方法是什么,而无需手动剪切其余字符串?

谢谢

2 个答案:

答案 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'