ConvertFrom-String

从字符串内容中提取并分析结构化对象。

语法

ConvertFrom-String
                [-Delimiter <String>]
                [-PropertyNames <String[]>]
                [-InputObject] <String>
                [<CommonParameters>]
ConvertFrom-String
                [-TemplateFile <String[]>]
                [-TemplateContent <String[]>]
                [-IncludeExtent]
                [-UpdateTemplate]
                [-InputObject] <String>
                [<CommonParameters>]

说明

ConvertFrom-String cmdlet 提取并分析字符串内容中的结构化属性。 此 cmdlet 通过分析传统文本流中的文本,生成对象。 对于管道中的每个字符串,该 cmdlet 通过分隔符或分析表达式拆分输入,然后将属性名称分配给每个由此得到的拆分元素。 可提供这些属性名称;如果不提供,它们将自动生成。

该 cmdlet 的默认参数集 ByDelimiter 严格通过正则表达式分隔符进行拆分。 与 Import-Csv cmdlet 不同,它不执行引号匹配或分隔符转译。

该 cmdlet 的可选参数集 TemplateParsing 从正则表达式捕获的组中生成元素。

此 cmdlet 支持两种模式:基本分隔分析和自动生成的示例驱动的分析。

默认情况下,分隔分析会在空格处将输入拆分,并为得到的组分配属性名称。 可以通过将 ConvertFrom-String 结果管道到 Format-* cmdlet 之一来自定义分隔符,也可以使用 Delimiter 参数。

该 cmdlet 还支持 Microsoft Research 的 FlashExtract 研究工作的自动生成的示例驱动的分析。

示例

示例 1:生成具有默认属性名称的对象

PS C:\> "Hello World" | ConvertFrom-String

P1    P2
--    --
Hello World


PS C:\>

此命令生成具有默认属性名称(P1 和 P2)的对象。 结果是 P1=“Hello”和P2=“World”。

示例 1A:了解生成对象

PS C:\> "Hello World" | ConvertFrom-String | Get-Member


   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
P1          NoteProperty string P1=Hello
P2          NoteProperty string P2=World


PS C:\>

该命令生成一个具有属性 P1、P2 的对象;默认情况下,两个属性的类型均为“字符串”。

示例 2:使用分隔符生成具有默认属性名称的对象

PS C:\> "Hello World" | ConvertFrom-String -Delimiter "ll"

P1 P2
-- --
He o World


PS C:\>

此命令通过将 Hello 中的“ll”指定为分隔符,生成 P1=“He”和 P2=“o World”属性的对象。

示例 3:生成包含两个命名属性的对象

PS C:\> "Hello World" | ConvertFrom-String -PropertyNames FirstWord, SecondWord

FirstWord SecondWord
--------- ----------
Hello     World


PS C:\>

此命令生成包含两个属性的对象:

  • FirstWord,包含值“Hello”
  • SecondWord,包含值“World”

示例 4:将表达式用作 TemplateContent 参数的值,将结果保存到变量中。

$template = @'
{Name*:Phoebe Cat}, {phone:425-123-6789}, {age:6}
{Name*:Lucky Shot}, {phone:(206) 987-4321}, {age:12}
'@

$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111)  222-3333, 1
'@

$testText  |
    ConvertFrom-String -TemplateContent $template -OutVariable PersonalData |
    Out-Null

Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData


Pet items found: 4

Name          phone           age
----          -----           ---
Phoebe Cat    425-123-6789    6
Lucky Shot    (206) 987-4321  12
Elephant Wise 425-888-7766    87
Wild Shrimp   (111)  222-3333 1

C:\ >

此命令将表达式用作 TemplateContent 参数的值。 为简单起见,表达式保存在变量中。 Windows PowerShell 现了解到,在指向 ConvertFrom-String 的管道上所使用的字符串具有三个属性:

  • 名称
  • 电话
  • age

每个输入行根据样例匹配情况进行评估;如果行与模式中给定的样例匹配,则提取值并将值传递给定义的输出变量。

示例数据 $template 提供两个不同的电话格式:

  • 425-123-6789
  • (206) 987-4321

并且有两个不同的年龄格式:

  • 6
  • 12

这意味着 (206) 987 4321 这样的手机号将无法被识别,因为没有与该模式匹配的示例数据(三位数序列与四位数序列之间没有连字符)。 同样,3 或更多位数的年龄也无法被识别。

示例 5:为生成的属性指定数据类型

$template = @'
{[string]Name*:Phoebe Cat}, {[string]phone:425-123-6789}, {[int]age:6}
{[string]Name*:Lucky Shot}, {[string]phone:(206) 987-4321}, {[int]age:12}
'@

$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111)  222-3333, 1
'@

$testText  |
    ConvertFrom-String -TemplateContent $template -OutVariable PersonalData | Out-Null

Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData


Pet items found: 4

Name          phone           age
----          -----           ---
Phoebe Cat    425-123-6789      6
Lucky Shot    (206) 987-4321   12
Elephant Wise 425-888-7766     87
Wild Shrimp   (111)  222-3333   1



C:\ >

这是与上面第 4 号相同的示例;唯一的区别在于模式字符串,其中包含每个所需属性的数据类型。 请注意这两个示例之间年龄列对齐方式的差异。

示例 5A:了解生成的对象

$template = @'
 {[string]Name*:Phoebe Cat}, {[string]phone:425-123-6789}, {[int]age:6}
 {[string]Name*:Lucky Shot}, {[string]phone:(206) 987-4321}, {[int]age:12}
 '@

 $testText = @'
 Phoebe Cat, 425-123-6789, 6
 Lucky Shot, (206) 987-4321, 12
 Elephant Wise, 425-888-7766, 87
 Wild Shrimp, (111)  222-3333, 1
 '@

 $testText  |
     ConvertFrom-String -TemplateContent $template -OutVariable PersonalData |
     Out-Null

 $PersonalData | Get-Member



   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
age         NoteProperty int age=6
Name        NoteProperty string Name=Phoebe Cat
phone       NoteProperty string phone=425-123-6789

C:\ >

Get-Member 显示年龄是整数类型。

参数

-Delimiter

指定用于标识元素之间边界的正则表达式。 通过拆分创建的元素将成为生成的对象中的属性。 最终,分隔符将在对 System.Text.RegularExpressions.RegularExpression.Split() 的调用中使用。

Type:String
Aliases:DEL
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeExtent

指示此 cmdlet 包括默认删除的扩展文本属性。

Type:SwitchParameter
Aliases:IE
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

指定从管道接收到的字符串,或包含字符串对象的变量。

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-PropertyNames

指定要向其分配生成对象中的拆分值的属性名称数组。 拆分或分析的每个文本行将生成表示属性值的元素。 如果 元素是捕获组的结果,并且该捕获组名为 (例如, (?<name>)(?'name') ) ,则将该捕获组的名称分配给 属性。

如果提供 PropertyName 数组中的任何元素,则这些名称将分配给尚未命名的属性。

如果提供的属性名称超过字段数,Windows PowerShell 将忽略多余的属性名称。 如果所指定的用于命名字段的属性名称数量不足,Windows PowerShell 将自动向任何未命名的属性分配数值属性名称:P1、P2 等。

Type:String[]
Aliases:PN
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TemplateContent

指定一个表达式,或一个保存为变量的表达式,用于描述此 cmdlet 会将字符串分配到的属性。 模板字段规范的语法如下:{[optional-typecast]name (sequence-spec,例如 *) :example-value}。 例如,{PersonInfo*:{Name:Patti Fuller}。

Type:String[]
Aliases:TC
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TemplateFile

将文件指定为数组,包含所需的字符串分析的模板。 在模板文件中,属性和其值括在方括号内,如下面的示例中所示。 如果属性(如 Name 属性及其关联的其他属性)多次出现,则可以添加星号 (*) 以指示这会导致多条记录。 这样可避免将多个属性提取到单个记录中。

{Name*:D avid Chew}

{City:Redmond}, {State:WA}

{Name*:Evan Narvaez}{Name*:Antonio Moreno}

{City:Issaquah}, {State:WA}

Type:String[]
Aliases:TF
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UpdateTemplate

指示此 cmdlet 将学习算法的结果保存到模板文件中的注释内。 这可加快算法学习过程的速度。 若要使用此参数,还必须指定具有 TemplateFile 参数的模板文件。

Type:SwitchParameter
Aliases:UT
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

String