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 |