首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文本文件解析为多个PowerShell对象

将文本文件解析为多个PowerShell对象
EN

Stack Overflow用户
提问于 2016-09-09 09:59:14
回答 2查看 264关注 0票数 1

我想将以下文本文件解析为PowerShell对象:

代码语言:javascript
复制
OBJECT Table 60000 My table 1
{
  OBJECT-PROPERTIES
  {
    Date=09-09-16;
    Time=11:27:31;
    Modified=Yes;
    Version List=;
  }
}

OBJECT Page 60001 My Page
{
  OBJECT-PROPERTIES
  {
    Date=09-09-16;
    Time=11:28:18;
    Modified=Yes;
    Version List=;
  }
}

OBJECT-PROPERTIES应该是PowerShell对象的属性。我还希望将对象的文本包括在对象中。

我说要做一些正则表达式,但我不知道如何将所有这些信息解析成一个正则表达式。

我的对象比2个对象长得多,但为了示例起见,它只有2个对象。

预期输出:

代码语言:javascript
复制
Object1:
  Type: Table
  Number: 60000
  Name: "My table 1"
  Date: "09-09-16"
  Time: "11:28:18"
  Modified: "Yes"
  "Version List": ""
  Object: "<All of the text in this object>"

Object2:
  Type: Page
  Number: 60001
  Name: "My Page"
  Date: "09-09-16"
  Time: "11:28:18"
  Modified: "Yes"
  "Version List": ""
  Object: "<All of the text in this object>"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-09 10:48:25

我设法做到了以下几点:

代码语言:javascript
复制
$txt = "OBJECT Table 60000 My table 1
{
  OBJECT-PROPERTIES
  {
    Date=09-09-16;
    Time=11:27:31;
    Modified=Yes;
    Version List=;
  }
}

OBJECT Page 60001 My Page
{
  OBJECT-PROPERTIES
  {
    Date=09-09-16;
    Time=11:28:18;
    Modified=Yes;
    Version List=;
  }
}"
$expr = "(?<Object>OBJECT (?<Type>\w+) (?<Number>\d+) (?<Name>[\w ]+)\s*{\s*OBJECT-PROPERTIES\s*{\s*Date=(?<Date>[\d-]+);\s*Time=(?<Time>[\d:]+);\s*Modified=(?<Modified>\w+);\s*Version List=(?<Version>[^;]*);\s*}\s*})"
[Regex]::Matches($txt, $expr) | % {
    [PSCustomObject]@{
      Type = $_.Groups["Type"].Value;
      Number = $_.Groups["Number"].Value;
      Name = $_.Groups["Name"].Value;
      Date = $_.Groups["Date"].Value;
      Time = $_.Groups["Time"].Value;
      Modified = $_.Groups["Modified"].Value;
      "Version List" = $_.Groups["Version"].Value;
      Object = $_.Groups["Object"].Value
    }
}

输出:

代码语言:javascript
复制
Type         : Table
Number       : 60000
Name         : My table 1
Date         : 09-09-16
Time         : 11:27:31
Modified     : Yes
Version List : 
Object       : OBJECT Table 60000 My table 1
               {
                 OBJECT-PROPERTIES
                 {
                   Date=09-09-16;
                   Time=11:27:31;
                   Modified=Yes;
                   Version List=;
                 }
               }

Type         : Page
Number       : 60001
Name         : My Page
Date         : 09-09-16
Time         : 11:28:18
Modified     : Yes
Version List : 
Object       : OBJECT Page 60001 My Page
               {
                 OBJECT-PROPERTIES
                 {
                   Date=09-09-16;
                   Time=11:28:18;
                   Modified=Yes;
                   Version List=;
                 }
               }
票数 1
EN

Stack Overflow用户

发布于 2016-09-09 10:46:01

下面是一个示例,其中有一个正则表达式来捕获除对象本身以外的所有属性(为此您可能需要一个新的属性,或者使用嵌套捕获组):

代码语言:javascript
复制
$regex = 'OBJECT\s+(?<type>\w+)\s+(?<number>\d+)\s+(?<name>.+?)\s{.*?Date=(?<date>[^;]+).*?Time=(?<time>.+?);.*?Modified=(?<modified>.+?);.*?Version List=(?<versionlist>.*?);'
$content = Get-Content $scripts.tmp
$matches = [regex]::Matches($content, $regex)
$matches | ForEach-Object {
    [PSCustomObject]@{
        Type = $_.Groups['type'].Value
        Number = $_.Groups['number'].Value
        Name = $_.Groups['name'].Value
        Date = $_.Groups['date'].Value
        Time = $_.Groups['time'].Value
        Modified = $_.Groups['modified'].Value
        "Version List" = $_.Groups['versionlist'].Value
    }
}

输出:

代码语言:javascript
复制
Type         : Table
Number       : 60000
Name         : My table 1
Date         : 09-09-16
Time         : 11:27:31
Modified     : Yes
Version List : 

Type         : Page
Number       : 60001
Name         : My Page
Date         : 09-09-16
Time         : 11:28:18
Modified     : Yes
Version List : 

Regex:

代码语言:javascript
复制
OBJECT\s+(?<type>\w+)\s+(?<number>\d+)\s+(?<name>.+?)\s{.*?Date=(?<date>[^;]+).*?Time=(?<time>.+?);.*?Modified=(?<modified>.+?);.*?Version List=(?<versionlist>.*?);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39408885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档