about_Split
簡短描述
說明如何使用Split運算符,將一或多個字串分割成子字串。
完整描述
Split 運算符會將一或多個字串分割成子字串。 您可以變更分割作業的下列元素:
- 分隔符。 預設值為空格符,但您可以指定指定分隔符的字元、字串、模式或腳本區塊。 PowerShell 中的 Split 運算符會使用分隔符中的正規表示式,而不是簡單的字元。
- 子字串的數目上限。 預設值為傳回所有子字串。 如果您指定小於子字串數目的數字,剩餘的子字串會串連在最後一個子字串中。
- 指定分隔符相符條件的選項,例如 SimpleMatch 和 Multiline。
Syntax
下圖顯示 -split 運算子的語法。
參數名稱不會出現在 命令中。 只包含參數值。 這些值必須以語法圖表中指定的順序顯示。
-Split <String>
-Split (<String[]>)
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]
您可以在任何二進位 Split 語句中取代 -iSplit
或 -cSplit
-split
, (包含分隔符或腳本區塊的 Split 語句) 。 -iSplit
和 -split
運算子不區分大小寫。 -cSplit
運算子會區分大小寫,這表示套用分隔符規則時會考慮大小寫。
參數
<字串或<字串>串[]>
指定要分割的一或多個字串。 如果您提交多個字串,所有字串都會使用相同的分隔符規則進行分割。
範例:
-split "red yellow blue green"
red
yellow
blue
green
<分隔符號>
識別子字串結尾的字元。 默認分隔符是空格符,包括空格和不可列印的字元,例如換行符 ('n) 和 tab ('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>
指定分割作業傳回的子字串數目上限。 預設值是分隔符分割的所有子字串。 如果有更多子字串,它們會串連至最終的子字串。 如果子字串較少,則會傳回所有子字串。 值為 0 會傳回所有子字串。
範例:
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
$c -split ",", 5
Mercury
Venus
Earth
Mars
Jupiter,Saturn,Uranus,Neptune
如果您將多個字串 (字串數位) 給 -split
運算符,則會 Max-substrings
個別套用限制至每個字串。
$c = 'a,b,c','1,2,3,4,5'
$c -split ',', 3
a
b
c
1
2
3,4,5
<Max-substrings>
不會指定傳回的物件數目上限。 在下列範例中, <Max-substrings>
設定為 3。
這會產生三個子字串值,但結果輸出中總共有五個字元串。 分隔符會包含在分割之後,直到達到最多三個子字串為止。 最後一個子字串中的其他分隔符會成為子字串的一部分。
'Chocolate-Vanilla-Strawberry-Blueberry' -split '(-)', 3
Chocolate
-
Vanilla
-
Strawberry-Blueberry
負值會傳回從輸入字串結尾開始所要求的子字串數量。
注意
PowerShell 7 已新增負值的支援。
$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,
arth,Mars,Ju
it
r,Saturn,Uranus,N
tun
<選項>
以引號括住選項名稱。 只有在語句中使用 Max-substrings> 參數時<,選項才有效。
Options 參數的語法為:
"SimpleMatch [,IgnoreCase]"
"[RegexMatch] [,IgnoreCase] [,CultureInvariant]
[,IgnorePatternWhitespace] [,ExplicitCapture]
[,Singleline | ,Multiline]"
SimpleMatch 選項如下:
- SimpleMatch:在評估分隔符時使用簡單的字串比較。 無法搭配 RegexMatch 使用。
- IgnoreCase:強制不區分大小寫的比對,即使指定了 -cSplit 運算符也一樣。
RegexMatch 選項如下:
- RegexMatch:使用正則表示式比對來評估分隔符。 這是預設行為。 無法搭配 SimpleMatch 使用。
- IgnoreCase:強制不區分大小寫的比對,即使指定了 -cSplit 運算符也一樣。
- CultureInvariant:評估分隔符時,忽略語言中的文化差異。 僅適用於 RegexMatch。
- IgnorePatternWhitespace:忽略標示為數位符號的未逸出空格符和批註, (#) 。 僅適用於 RegexMatch。
- 多行:多行模式會
^
強制並$
比對每一行的開頭結尾,而不是輸入字串的開頭和結尾。 - 單行:單行模式會將輸入字串視為 SingleLine。
它會強制
.
字元比對每個字元, (包括換行) ,而不是比對每一個字元 EXCEPT 換行符\n
。 - ExplicitCapture:忽略非具名的相符群組,以便只傳回結果清單中的明確擷取群組。 僅適用於 RegexMatch。
一元和二進位分割運算符
一元分割運算子 (-split <string>
) 的優先順序高於逗號。 因此,如果您將以逗號分隔的字串清單提交至一元分割運算符,則只有在分割第一個逗號) 之前,才會 (第一個字符串。
使用下列其中一種模式來分割多個字串:
- 使用二進位分割運算符 (<string[]> -split <分隔符>)
- 以括弧括住所有字串
- 將字串儲存在變數中,然後將變數提交至分割運算元
請思考一下下列範例:
PS> -split "1 2", "a b"
1
2
a b
PS> "1 2", "a b" -split " "
1
2
a
b
PS> -split ("1 2", "a b")
1
2
a
b
PS> $a = "1 2", "a b"
PS> -split $a
1
2
a
b
範例
下列語句會在空格符分割字串。
-split "Windows PowerShell 2.0`nWindows PowerShell with remoting"
Windows
PowerShell
2.0
Windows
PowerShell
with
remoting
下列語句會以任何逗號分割字串。
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split ','
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
下列語句會分割模式 「er」 上的字串。
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split 'er'
M
cury,Venus,Earth,Mars,Jupit
,Saturn,Uranus,Neptune
下列語句會在字母 「N」 上執行區分大小寫的分割。
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -cSplit 'N'
Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,
eptune
下列語句會將字串分割為 「e」 和 「t」。
"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」,但會將產生的子字串限制為六個子字串。
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6
M
cu
y,V
nus,
arth,Mars,Jupiter,Saturn,Uranus,Neptune
下列語句會將字串分割成三個子字串。
"a,b,c,d,e,f,g,h" -split ",", 3
a
b
c,d,e,f,g,h
下列語句會將字串分割成從字串結尾開始的三個子字串。
"a,b,c,d,e,f,g,h" -split ",", -3
a,b,c,d,e,f
g
h
下列語句會將兩個字串分割成三個子字串。 (此限制會個別套用至每個字串。)
"a,b,c,d", "e,f,g,h" -split ",", 3
a
b
c,d
e
f
g,h
下列語句會在第一個數位的 here-string 中分割每一行。 它會使用多行選項來辨識每一行和字串的開頭。
0 代表 Max-substrings 參數的「全部傳回」值。 只有在指定 Max-substrings 值時,才可以使用多行等選項。
$a = @'
1The first line.
2The second line.
3The third of three lines.
'@
$a -split "^\d", 0, "multiline"
The first line.
The second line.
The third of three lines.
下列語句會使用反斜杠字元逸出點 (.) 分隔符。
使用預設值 RegexMatch 時,以引弧括住的點 (“”。) 解譯為符合換行符以外的任何字元。 因此,Split 語句會傳回每一個字元的空白行,但換行符除外。
"This.is.a.test" -split "\."
This
is
a
test
下列語句會使用 SimpleMatch 選項來指示 -split 運算符,以常值方式解譯點 (.) 分隔符。
0 代表 Max-substrings 參數的「全部傳回」值。 只有在指定 Max-substrings 值時,才可以使用SimpleMatch之類的選項。
"This.is.a.test" -split ".", 0, "simplematch"
This
is
a
test
下列語句會根據變數的值,在兩個分隔符的其中一個分割字串。
$i = 1
$c = "LastName, FirstName; Address, City, State, Zip"
$c -split $(if ($i -lt 1) {","} else {";"})
LastName, FirstName
Address, City, State, Zip