共用方式為


about_Split

簡短描述

說明如何使用Split運算符,將一或多個字串分割成子字串。

詳細描述

Split 運算符會將一或多個字串分割成子字串。 您可以變更分割作業的下列元素:

  • 分隔符。 預設值為空格符,但您可以指定指定分隔符的字元、字串、模式或腳本區塊。 PowerShell 中的 Split 運算符會使用分隔符中的正規表示式,而不是簡單的字元。
  • 子字串的數目上限。 預設值是傳回所有子字串。 如果您指定小於子字串數目的數位,則會在最後一個子字串中串連剩餘的子字串。
  • 指定分隔符比對條件的選項,例如 SimpleMatch 和 Multiline。

語法

下圖顯示 -split 運算子的語法。

參數名稱不會出現在 命令中。 只包含參數值。 值必須以語法圖表中指定的順序顯示。

-Split <String>
-Split (<String[]>)
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]

您可以在任何二進位 Split 語句中取代 或 -cSplit-split 來取代 -iSplit 或 (包含分隔符或腳本區塊的 Split 語句)。 -iSplit-split 運算子不區分大小寫。 運算子 -cSplit 會區分大小寫,這表示套用分隔符規則時會考慮大小寫。

參數

<字串或<字串>串[]>

指定要分割的一或多個字串。 如果您提交多個字串,則會使用相同的分隔符規則來分割所有字串。

範例:

-split "red yellow blue green"
red
yellow
blue
green

<分隔符號>

識別子字串結尾的字元。 默認分隔符為空格元,包括空格和不可列印的字元,例如換行符 ('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>

指定分割作業所傳回的子字串數目上限。 預設值是分隔符分割的所有子字串。 如果有更多子字串,它們會串連至最終的子字串。 如果子字串較少,則會傳回所有子字串。 值為 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。 它會強制 . 字元比對每個字元(包括換行符),而不是比對每一個字元,但換行 \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

下列語句會分割此處字串中第一個數位的每一行。 它會使用 [多行] 選項來辨識每一行和字串的開頭。

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

另請參閱