about_Split
应用到: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0
about_Split
说明如何使用拆分运算符将一个或多个字符串拆分为子字符串。
拆分运算符将一个或多个字符串拆分为子字符串。你可以更改拆分操作的以下元素:
-- 分隔符。默认为空白,但你可以指定字符、字符串、模式,或者指定分隔符的脚本块。Windows PowerShell® 中的拆分运算符在分隔符中使用正则表达式,而不是一个简单的字符。
-- 子字符串的最大数目。默认为返回所有子字符串。如果你指定的数目小于子字符串数,则剩下的子字符串将连接在最后一个子字符串中。
-- 指定匹配分隔符的条件的选项,例如 SimpleMatch 或 Multiline。
下图显示 -split 运算符的语法。
参数名称不会出现在命令中。仅包括参数值。这些值必须按语法关系图中指定的顺序出现。
-Split <String>
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]
你可以在任何二进制拆分语句(包括分隔符或脚本块的拆分语句)中用 -iSplit 或 -cSplit 替代 -split。-iSplit 和 -split 运算符不区分大小写。-cSplit 运算符区分大小写,这意味着在应用分隔符规则时,应考虑大小写。
<字符串>
指定要拆分的一个或多个字符串。如果提交多个字符串,则所有字符串均使用同一分隔符规则拆分。例如:-split "red yellow blue green" red yellow blue green
<Delimiter>
标识子字符串末尾的字符。默认分隔符为空白,包括空格和非打印字符,例如换行符 (`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> 设置为 3。其导致对字符串值进行 3 次拆分,但产生的输出中共有 5 个字符串;拆分后包括了分隔符,直到达到 3 个子字符串的最大值。最后一个子字符中的其他分隔符将成为子字符串的一部分。
'Chocolate-Vanilla-Strawberry-Blueberry' -split '(-)', 3; Chocolate - Vanilla - Strawberry-Blueberry
<Max-substrings>
指定一个字符串的最大拆分次数。默认所有子字符串均由分隔符拆分。如有子字符串数目大于该最大拆分次数,则它们将连接到最后一个子字符串。如有子字符串数目小于该最大拆分次数,则将返回所有子字符串。值为 0 和负数时将返回所有子字符串。Max-substrings 不指定返回的最大对象数;其值等于一个字符串的最大拆分次数。如果将多个字符串(一个字符串数组)提交到拆分运算符,则 Max-substrings 限制将分别应用于每个字符串。m例如:
$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,Earth,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 一同使用时有效。
-- Multiline:多行模式将识别行和字符串的开头和末尾。仅在与 RegexMatch 一同使用时有效。默认值为 Singleline。
-- Singleline:单行模式仅识别字符串的开头和末尾。仅在与 RegexMatch 一同使用时有效。默认值为 Singleline。
-- ExplicitCapture:忽略未命名的匹配组,以便在结果列表中仅返回显式捕获组。仅在与 RegexMatch 一同使用时有效。
一元拆分运算符 (-split <string>) 优先于逗号。因此,如果将逗号分隔的字符串列表提交到一元拆分运算符,则仅拆分第一个字符串(在第一个逗号前)。
若要拆分多个运算符,请使用二进制拆分运算符 (<string> -split <delimiter>)。将所有字符串括在括号中,或将字符串存储在变量中,然后将该变量提交到拆分运算符。
请考虑以下示例:
-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 表示“返回所有”Max-substrings 参数值。仅当指定了 Max-substrings 值时,才可使用诸如 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 时,括在引号中的句点(“.”)被解释为匹配除换行符之外的任何字符。因此,拆分语句将为除换行符之外的每个字符返回一个空行。
0 表示“返回所有”Max-substrings 参数值。仅当指定了 Max-substrings 值时,才可使用诸如 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
以下拆分语句以此在尖括号和分号处拆分 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