about_Split
適用於: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0
主題
about_Split
簡短描述
說明如何使用分割運算子將一或多個字串分割成子字串。
詳細描述
分割運算子會將一或多個字串分割成子字串。您可以變更下列分割作業的元素:
-- 分隔符號。預設值是空白字元,但是您可以指定字元、字串、模式或指定分隔符號的指令碼區塊。Windows PowerShell® 中的分割運算子在分隔符號中使用規則運算式,而不是一個簡單的字元。
-- 子字串數目最大值。預設值是傳回所有子字串。如果您指定小於子字串數目的數字,其餘的子字串會串連在最後一個子字串中。
-- 用來指定哪一個分隔符號是符合 (例如 SimpleMatch 和 Multiline) 之條件的選項。
語法
下圖顯示 -split 運算子的語法。
在命令中看不到參數名稱。僅包含參數值。值必須以語法圖表中所指定的順序出現。
-Split <String>
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]
您可以在任何二元分割陳述式 (包含分隔符號或指令碼區塊的分割陳述式) 中以 -iSplit 或 -cSplit 取代 -split。-iSplit 和 -split 運算子不區分大小寫。-CSplit 運算子區分大小寫,也就是說套用分隔符號規則時會考慮大小寫。
參數
<String>
指定要分割的一或多個字串。如果您提交多個字串,會使用相同的分隔符號規則分割所有字串。範例:-split "red yellow blue green" red yellow blue green
<Delimiter>
識別子字串結尾的字元。預設的分隔符號是空白字元,包括空格和不可列印字元,例如新行字元 (`n) 和定位字元 (`t)。當分割字串時,會略過所有子字串的分隔符號。範例:"Lastname:FirstName:Address" -split ":" Lastname FirstName Address
根據預設,會略過結果中的分隔符號。若要保留所有或部分分隔符號,以括號括住您想要保留的部分。如果加入 <Max-substrings> 參數,當您的命令分割集合時,它的優先順序較高。如果您選擇包含分隔符號作為輸出的一部分,此命令會傳回分隔符號作為輸出的一部分,不過,分割字串以傳回分隔符號作為輸出的一部分並不會計算為分割。範例:
"Lastname:FirstName:Address" -split "(:)" Lastname : FirstName : Address "Lastname/:/FirstName/:/Address" -split "/(:)/" Lastname : FirstName : Address
在下列範例中,<Max-substrings> 設為 3。這會導致字串值的三個分割,但是產生的輸出中共有五個字串;分隔符號是包含在分割之後,直到達到三個子字串的最大值。最後一個子字串中的其他分隔符號會成為子字串的一部分。
'Chocolate-Vanilla-Strawberry-Blueberry' -split '(-)', 3; Chocolate - Vanilla - Strawberry-Blueberry
<Max-substrings>
指定字串分割次數的最大值。預設值是以分隔符號分割的所有子字串。如果子字串較多,它們會串連到最後一個子字串。如果子字串較少,則會傳回所有子字串。值為 0 和負值會傳回所有子字串。Max-substrings 不會指定傳回物件的最大數目,其值等於字串分割次數的最大值。如果您將一個以上的字串 (字串陣列) 提交至分割運算子,則 Max-substrings 限制會分別套用至每個字串。範例:
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" $c -split ",", 5 Mercury Venus Earth Mars Jupiter,Saturn,Uranus,Neptune
<ScriptBlock>
指定套用分隔符號之規則的運算式。運算式必須評估為 $true 或 $false。以大括號括住指令碼區塊。範例:$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" $c -split {$_ -eq "e" -or $_ -eq "p"} M rcury,V nus,Earth,Mars,Ju it r,Saturn,Uranus,N tun
<選項>
將選項名稱括在引號中。選項只有在 <Max-substrings> 參數用於陳述式中時才有效。選項參數的語法是:
"SimpleMatch [,IgnoreCase]" "[RegexMatch] [,IgnoreCase] [,CultureInvariant] [,IgnorePatternWhitespace] [,ExplicitCapture] [,Singleline | ,Multiline]"
SimpleMatch 選項如下:
-- SimpleMatch:評估分隔符號時使用簡單的字串比較。無法搭配 RegexMatch 使用。
-- IgnoreCase:強制不區分大小寫比對,即使已指定 -cSplit 運算子。
RegexMatch 選項如下:
-- RegexMatch:使用規則運算式比對來評估分隔符號。這是預設行為。無法搭配 SimpleMatch 使用。
-- IgnoreCase:強制不區分大小寫比對,即使已指定 -cSplit 運算子。
-- CultureInvariant:評估分隔符號時會忽略語言的文化特性差異。只有在搭配 RegexMatch 使用時有效。
-- IgnorePatternWhitespace:會忽略未逸出的空白字元和以數字符號 (#) 標示的註解。只有在搭配 RegexMatch 使用時有效。
-- Multiline:Multiline 模式會辨識行和字串的開始和結束。只有在搭配 RegexMatch 使用時有效。預設值為 Singleline。
-- Singleline:Singleline 模式只會辨識字串的開始和結束。只有在搭配 RegexMatch 使用時有效。預設值為 Singleline。
-- ExplicitCapture:會忽略非具名的相符群組,如此在結果清單中僅會傳回明確擷取群組。只有在搭配 RegexMatch 使用時有效。
一元和二元分割運算子
一元分割運算子 (-split <string>) 的優先順序高於逗號。因此,如果將逗號分隔的字串清單送出至一元分割運算子,只會分割第一個字串 (在第一個逗號之前)。
若要分割多個字串,使用二元分割運算子 (<string> -split <delimiter>)。使用括號括住所有字串,或將字串儲存在變數中,再將變數提交至分割運算子。
請考慮下列範例:
-split "1 2", "a b"
1
2
a b
"1 2", "a b" -split " "
1
2
a
b
-split ("1 2", "a b")
1
2
a
b
$a = "1 2", "a b"
-split $a
1
2
a
b
範例
下列陳述式會在空白字元處分隔字串。
C:\PS> -split "Windows PowerShell 2.0`nWindows PowerShell with remoting"
Windows
PowerShell
2.0
Windows
PowerShell
with
remoting
下列陳述式會在任何逗號處分割字串。
C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split ','
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
下列陳述式會在模式 "er" 分隔字串。
C:\PS>"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split 'er'
M
cury,Venus,Earth,Mars,Jupit
,Saturn,Uranus,Neptune
下列陳述式會在字母 "N" 執行區分大小寫分割。
C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -cSplit 'N'
Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,
eptune
下列陳述式會在 "e" 和 "t" 處分割字串。
C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[et]'
M
rcury,V
nus,
ar
h,Mars,Jupi
r,Sa
urn,Uranus,N
p
un
下列陳述式會在 "e" 和 "r" 處分割字串,但是會將產生的子字串限制為六個子字串。
C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6
M
cu
y,V
nus,
arth,Mars,Jupiter,Saturn,Uranus,Neptune
下列陳述式會將字串分割成三個子字串。
C:\PS> "a,b,c,d,e,f,g,h" -split ",", 3
a
b
c,d,e,f,g,h
下列陳述式會將兩個字串分割成三個子字串。(限制會分別套用至每個字串。)
C:\PS> "a,b,c,d", "e,f,g,h" -split ",", 3
a
b
c,d
e
f
g,h
下列陳述式會在 here-string 的第一個數字分割每行。它會使用 Multiline 選項來辨識每行和字串的開頭。
0 表示 Max-substrings 參數的「傳回所有」值。您可以只在指定 Max-substrings 值時使用選項,例如 Multiline。
C:\PS> $a = @'
1The first line.
2The second line.
3The third of three lines.
'@
C:\PS> $a -split "^\d", 0, "multiline"
The first line.
The second line.
The third of three lines.
下列陳述式會使用 SimpleMatch 選項來指示 -split 運算子逐字解譯 (.) 分隔符號。
使用預設值 RegexMatch,以引號括住的點 (".") 會被解譯為符合新行字元以外的任何字元。如此一來,分割陳述式會針對新行字元以外的每個字元傳回空白行。
0 表示 Max-substrings 參數的「傳回所有」值。您可以只在 Max-substrings 值受到指定時使用選項 (例如 SimpleMatch)。
C:\PS> "This.is.a.test" -split ".", 0, "simplematch"
This
is
a
test
下列陳述式會依變數的值而定,以兩個分隔符號的其中一個來分隔字串。
C:\PS> $i = 1
C:\PS> $c = "LastName, FirstName; Address, City, State, Zip"
C:\PS> $c -split {if ($i -lt 1) {$_ -eq ","} else {$_ -eq ";"}}
LastName, FirstName
Address, City, State, Zip
下列陳述式會先用角括弧,再以分號分割 XML 檔案。結果是 XML 檔案的可讀取版本。
C:\PS> get-process PowerShell | export-clixml ps.xml
C:\PS> $x = import-clixml ps.xml
C:\PS> $x = $x -split "<"
C:\PS> $x = $x -split ";"
若要顯示結果,請輸入 "$x"。
C:\PS> $x
@{__NounName=Process
Name=PowerShell
Handles=428
VM=150081536
WS=34840576
PM=36253696
...
另請參閱
Split-Path
about_Operators
about_Comparison_Operators
about_Join