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 还支持基于 FlashExtract 自动生成的示例驱动分析,Microsoft Research的研究工作。
示例
示例 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 的对象;默认情况下,这两个属性均为“string”类型。
示例 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 具有三个属性:
- 名称
- 手机
- 年龄
输入中的每个行都由示例匹配项计算;如果行与模式中给出的示例匹配,则提取值并将其传递给定义的输出变量。
示例数据 $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()。
类型: | String |
别名: | DEL |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-IncludeExtent
指示此 cmdlet 包含默认删除的盘区文本属性。
类型: | SwitchParameter |
别名: | IE |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-InputObject
指定从管道接收的字符串,或包含字符串对象的变量。
类型: | String |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-PropertyNames
指定要在生成的对象中分配拆分值的属性名称数组。 拆分或分析的每一行文本都会生成表示属性值的元素。 如果元素是捕获组的结果,并且该捕获组命名(例如,(?<name>)
或 (?'name')
),则将该捕获组的名称分配给该属性。
如果提供 PropertyName 数组中的任何元素,则这些名称将分配给尚未命名的属性。
如果提供的属性名称多于字段,Windows PowerShell 将忽略额外的属性名称。 如果未指定足够的属性名称来命名所有字段,Windows PowerShell 会自动将数值属性名称分配给未命名的任何属性:P1、P2 等。
类型: | String[] |
别名: | PN |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-TemplateContent
指定一个表达式或一个保存为变量的表达式,该表达式描述此 cmdlet 向其分配字符串的属性。 模板字段规范的语法如下:{[optional-typecast]name(sequence-spec,例如 *):example-value}。 例如 {PersonInfo*:{Name:Patti Fuller}。
类型: | String[] |
别名: | TC |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-TemplateFile
将文件指定为数组,其中包含字符串所需分析的模板。 在模板文件中,属性及其值括在括号中,如以下示例所示。 如果属性(如 Name 属性及其关联的其他属性)显示多次,则可以添加星号 \ 以指示这会导致多个记录。 这可以避免将多个属性提取到单个记录中。
{Name*:D avid Chew}
{City:Redmond}, {State:WA}
{Name*:Evan Narvaez}{Name*:Antonio Moreno}
{City:Issaquah}, {State:WA}
类型: | String[] |
别名: | TF |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-UpdateTemplate
指示此 cmdlet 将学习算法的结果保存到模板文件中的注释中。 这使得算法学习过程更快。 若要使用此参数,还必须使用 TemplateFile 参数指定模板文件。
类型: | SwitchParameter |
别名: | UT |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |