.net - Powershell中的正则表达式模式

标签 .net regex powershell

我正在尝试使用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/

相关文章:

regex - 是什么导致此正则表达式匹配所有内容?

regex - 使用 Perl 从多行字符串中提取文本

c# - Entity Framework 5 Remove() 不从数据库中删除

.net - 如何在正确的语言环境中将 float 插入 SQL 表

python - re.sub() 带有非空替换会占用 Python 中的以下字符

PowerShell 命令行参数和 '--'

windows - 自动化远程桌面连接

json - 在 PowerShell 中组合 JSON 对象

.net - 将成员 'X'更改为与关联成员 'Y'不一致

c# - Azure 服务总线上的多个客户端接收单独的消息