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 语句 (任何二进制 Split 语句中替换 -iSplit
或 。 -iSplit
和 -split
运算符不区分大小写。 运算符 -cSplit
区分大小写,这意味着在应用分隔符规则时将考虑大小写。
参数
<String> 或 <String[]>
指定要拆分的一个或多个字符串。 如果提交多个字符串,则使用相同的分隔符规则拆分所有字符串。
例如:
-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 有效。
- 多行:多行模式强制
^
和$
匹配每行的开头,而不是输入字符串的开头和结尾。 - 单行:单行模式将输入字符串视为 单行。
它强制
.
字符匹配每个字符 (包括换行符) ,而不是匹配除换行符\n
以外的每个字符。 - ExplicitCapture:忽略非命名匹配组,以便结果列表中仅返回显式捕获组。 仅对 RegexMatch 有效。
一元和二进制拆分运算符
) (-split <string>
一元拆分运算符的优先级高于逗号。 因此,如果将逗号分隔的字符串列表提交到一元拆分运算符,则仅拆分第一个逗号) 之前的第一个字符串 (。
使用以下模式之一拆分多个字符串:
- 使用二进制拆分运算符 (<string[]> -split <delimiter>)
- 将所有字符串括在括号中
- 将字符串存储在变量中,然后将变量提交到 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