about_split
主題
about_Split
簡短描述
說明如何使用 split 運算子將一個或多個字串分割為子字串。
完整描述
split 運算子會將一個或多個字串分割為子字串。您可以變更下列分割操作的元素:
-- 分隔字元: 預設為空白字元,但是您可以指定字元、字串、模式或指令碼區
塊來指定分隔字元。
-- 子字串數目的上限: 預設為傳回所有子字串。如果您指定的數目少於子字串
的數目,則其餘子字串會串連於最後一個子字串。
-- 指定分隔字元須符合之條件的選項,例如 SimpleMatch 和 Multiline。
語法
下表顯示 -split 運算子的語法。
參數名稱不會出現在命令中,只包含參數值。值必須依照語法圖表中指定的順序出現。
-Split <字串>
<字串> -Split <分隔字元>[,<子字串數目上限>[,"<選項>"]]
<字串> -Split {<指令碼區塊>} [,<子字串數目上限>]
您可以在任何 split 陳述式中以 -iSplit 或 -cSplit 取代 -split。
-iSplit 和 -split 運算子不區分大小寫。-cSplit 運算子區分大小寫,也就是說,
套用分隔字元規則時應考慮大小寫。
參數
<字串>
指定一個或多個要分割的字串。如果您提交多個字串,則會使用相同的分隔字元
規則分割所有字串。
範例:
-split "red yellow blue green"
red
yellow
blue
green
<分隔字元>
識別子字串結尾的字元。預設分隔字元是空白字元,包括空格和無法列印的字
元,例如新行 (`n) 和 Tab (`t)。當分割字串時,會省略所有子字串中的分隔
字元。範例:
"Lastname:FirstName:Address" -split ":"
Lastname
FirstName
Address
<子字串數目上限>
指定傳回的子字串數目上限。預設為分隔字元分割的所有子字串。如果有較多的
子字串,則會串連於最後一個子字串。如果子字串較少,則會傳回所有子字串。
0 值和負值會傳回所有子字串。
如果您提交多個字串 (字串陣列) 至 split 運算子,則會分別對每一個字串套用
子字串數目上限。範例:
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" $c
-split ",", 5
Mercury
Venus
Earth
Mars
Jupiter,Saturn,Uranus,Neptune
<指令碼區塊>
指定套用分隔字元之規則的運算式。運算式必須評估為 $true 或 $false。請以
大括號括住指令碼區塊。範例:
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptu
ne" $c -split {$_ -eq "e" -or $_ -eq "p"}
M
rcury,V
nus,Earth,Mars,Ju
it
r,Saturn,Uranus,N
tun
<選項>
請以引號括住選項名稱。只有當在陳述式中使用 <子字串數目上限> 參數時,
選項參數才有效。
選項參數的語法為:
"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 <字串>) 的優先順序高於逗號。因此,如果您提交逗號分
隔的字串清單給一元分割運算子,則只會分割第一個字串 (位於第一個逗號前)。
若要分割多個字串,請使用二元分割運算子 (<字串> -split <分隔字元>)。請以括
號括住所有字串,或是將字串儲存在變數中,然後將變數提交給分割運算子。
請看以下範例:
-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 代表「子字串數目上限」參數的「全部傳回」值。您只能在指定子字串數目上限值
時使用選項,例如 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 時,以引號括住的句號 (".") 會解譯為符合新行字元以外
的任何字元。因此,split 陳述式會針對新行以外的每一個字元傳回一個空白行。
0 代表「子字串數目上限」參數的「全部傳回」值。您只能在指定子字串數目上限值
時使用選項,例如 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
下列 split 陳述式會先在角括弧處分割 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