共用方式為


ConvertFrom-String

從字串內容擷取和剖析結構化屬性。

語法

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

Description

ConvertFrom-String Cmdlet 會從字串內容擷取和剖析結構化屬性。 此 Cmdlet 會藉由剖析傳統文字數據流中的文字來產生 物件。 對於管線中的每個字串,Cmdlet 會以分隔符或剖析表示式分割輸入,然後將屬性名稱指派給每個產生的分割專案。 您可以提供這些屬性名稱;如果您未這麼做,系統會自動為您產生它們。

Cmdlet 的預設參數集,ByDelimiter,完全分割正則表達式分隔符。 它不會執行引號比對或分隔符逸出,就像 cmdlet Import-Csv 一樣。

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}{名稱*:安東尼奧·莫雷諾}

{City:Issaquah}, {State:WA}

類型:String[]
別名:TF
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-UpdateTemplate

指出此 Cmdlet 會將學習演算法的結果儲存至範本檔案中的批注。 這可讓演算法學習程式更快。 若要使用此參數,您也必須使用 TemplateFile 參數來指定範本檔案。

類型:SwitchParameter
別名:UT
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

輸入

String