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
會忽略負值。
<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。
注意
SingleLine 是預設行為。 單行和多行不能與options參數搭配使用。 這已在PowerShell 6.0中解決。 解決方法是在正則表達式中使用 Mode-Modifiers 。 您可以在正規表示式選項中 深入瞭解模式修飾詞
一元和二元分割運算符
一元分割運算子 (-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
下列語句會分割此處字串中第一個數位的每一行。 它會使用 [多行] 選項來辨識每一行和字串的開頭。
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