【问题标题】:Regex and powershell: Parse long string for specific guids正则表达式和 powershell:解析特定 guid 的长字符串
【发布时间】:2018-09-06 06:11:31
【问题描述】:

我有一个 2000 行的字符串,我需要对其进行解析。字符串的最大部分是我不关心的路径(C:\ 等)。我只需要从 * WRITER "Microsoft Hyper-V VSS Writer" 获得两件事:

1) 编写器 ID = {66841cd4-6ded-4f4b-8f17-fd23f8ddc3de}

2) 对于此特定 编写器(Microsoft Hyper-V VSS 编写器)中的每个组件,我需要名称,这也是一个 guid。例如第一个组件是:-名称:02E98059-C043-421D-96BD-C19B193E2961

我的尝试是:

[Regex]::Match(input, @"(?is)\* WRITER ""(Microsoft Hyper-V VSS Writer)""\s*-\s*Writer\s*ID\s*=\s*[{(]?(?<WriterID>[0-9A-F]{8}[-]?(?:[0-9A-F]{4}[-]?){3}[0-9A-F]{12})[)}]?(?:.*?\n[\t\p{Zs}]{3,}\+\s*Component ""\1:\\(?<CompID>[^""]+))*");

由于要解析的字符串很长,我创建了一个正则表达式 101,链接如下:https://regex101.com/r/UzfR1f/1

任何帮助将不胜感激。

【问题讨论】:

    标签: .net regex powershell


    【解决方案1】:

    在我看来更容易将其转储到文件中。那么:

    $getNext = $false
    $fileContents = Get-Content File.txt
    foreach($line in $fileContents){
        if($getNext){
            $line
            $getNext = $false
        }
        if($line -like '*"Microsoft Hyper-V VSS Writer*'){
            $getNext = $true
        }
    }
    

    您可能需要解析出实际的 guid,但我会输出整行,以便您查看哪个是哪个。

    【讨论】:

    • 事情是:这让我得到了所有的作家 ID,这不是我想要的。我只需要 * WRITER "Microsoft Hyper-V VSS Writer" 的 Writer Id,以及其中所有组件的 Name 属性,它们也是 guid。
    • 啊……我误会了。一分钟。
    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 2022-01-25
    • 2016-04-29
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多