regex - 正则表达式-在Powershell中替换

标签 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文件名的最佳方法是什么?

谢谢

最佳答案

您可以执行的操作是捕获整个字符串,并在替换字符串中使用捕获组,从而删除不需要的部分。

$csprojectsNames = $projectsInFile -replace '.+= "(\S*) "(.*?)",.*"','$2'

第二个捕获组是= "Project", "....."后面的引号之间的数据。由于这是第二个捕获组,因此我们将整个替换为该组'$2'。使用单引号确保PowerShell不会尝试扩展变量。

更好的方法

您可能可以直接在[^"]*?\.csproj中使用select-string,而无需进行辅助解析。这将匹配.csproj之前的所有内容(而不是引号),因此不会出现太多问题。

关于regex - 正则表达式-在Powershell中替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31616531/

相关文章:

php - 日期验证的正则表达式帮助 - dd/mm/yyyy - PHP

regex - 如何在shell脚本中使用 'sed'替换文件中的一行

powershell - Windows 10如何在环境变量中的系统变量中添加多个PATH?

MySQL 用其他表中的名称替换 ID

php - 在 PHP5 中用多个/不同的值搜索和替换多个值?

从另一个 Perl 脚本内部调用时,Perl 搜索和替换命令不起作用

javascript - 为什么在正则表达式中以某种方式忽略了 sub 之后的第一个字符?

javascript - 如何在javascript中使用正则表达式查找字符串中的子字符串?

powershell - 匹配两个不同文件中的字符串,并在下一行输出此+

ruby - 如何在 vagrant 代理后面安装代理插件