about_Split
主题
about_Split
简短说明
说明如何使用拆分运算符将一个或多个字符串拆分为多个子字符串。
详细说明
拆分运算符用于将一个或多个字符串拆分为多个子字符串。可更改拆分操作的以下元素:
-- 定界符。默认为空白,但是可指定字符、字符串、模式或用于设置定界符的脚本块。
-- 子字符串的最大数目。默认设置为返回所有子字符串。如果指定的数字小于子字符串数,
则其余子字符串将合并到最后一个子字符串中。
-- 用于指定定界符匹配条件的选项,如 SimpleMatch 和 Multiline。
语法
下图显示了 -split 运算符的语法。
命令中没有包含参数名称,只包含了参数值。参数值必须按语法图中指定的顺序出现。
-Split <String>
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]
在任何拆分语句中,都可用 -iSplit 或 -cSplit 替换 -split。
-iSplit 和 -split 运算符不区分大小写。-cSplit 运算符区分大小写,这意味着应用定界符规则时会考虑大小写。
参数
<String>
指定要拆分的一个或多个字符串。如果提交多个字符串,则将使用相同的定界符规则来拆分所有字符串。
示例:
-split "red yellow blue green"
red
yellow
blue
green
<Delimiter>
用于标识子字符串结束位置的字符。默认定界符是空白,包括空格以及如换行符 (`n) 和制表符 (`t) 等不可
打印字符。拆分字符串时,将从所有子字符串中省略定界符。示例:
"Lastname:FirstName:Address" -split ":"
Lastname
FirstName
Address
<Max-substrings>
指定返回的子字符串的最大数目。默认设置为通过定界符拆分出的所有子字符串。
如果子字符串数目大于最大数目,多出的子字符串将合并到最后一个子字符串中。如果子字符串数目
小于最大数目,将返回所有子字符串。使用 0 值或负值时将返回所有子字符串。
如果向拆分运算符提交多个字符串(一组字符串),Max-substrings 限制将单独应用于每个字符串。示例:
$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,Neptu
ne" $c -split {$_ -eq "e" -or $_ -eq "p"}
M
rcury,V
nus,Earth,Mars,Ju
it
r,Saturn,Uranus,N
tun
<Options>
请将选项名称括在引号内。仅当语句中使用 <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:使用 Multiline 模式可识别行和字符串的开头和结尾。仅当与 RegexMatch 一起使
用时有效。默认设置为 Singleline。
-- 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"拆分字符串,但将生成的子字符串数限制为 6 个。
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