说明如何使用拆分运算符将一个或多个字符串拆分为多个子字符串

?主题
about_Split

简短说明
说明如何使用拆分运算符将一个或多个字符串拆分为多个子字符串。

详细说明
拆分运算符用于将一个或多个字符串拆分为多个子字符串。可更改拆分操作的以下元素:

-- 定界符。默认为空白,但是可指定字符、字符串、模式或用于设置定界符的脚本块。

-- 子字符串的最大数目。默认设置为返回所有子字符串。如果指定的数字小于子字符串数,
则其余子字符串将合并到最后一个子字符串中。

-- 用于指定定界符匹配条件的选项,如 SimpleMatch 和 Multiline。


语法

下图显示了 -split 运算符的语法。

命令中没有包含参数名称,只包含了参数值。参数值必须按语法图中指定的顺序出现。

-Split

-Split [,[,""]]

-Split {} [,]

在任何拆分语句中,都可用 -iSplit 或 -cSplit 替换 -split。
-iSplit 和 -split 运算符不区分大小写。-cSplit 运算符区分大小写,这意味着应用定界符规则时会考虑大小写。


参数


指定要拆分的一个或多个字符串。如果提交多个字符串,则将使用相同的定界符规则来拆分所有字符串。
示例:

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


用于标识子字符串结束位置的字符。默认定界符是空白,包括空格以及如换行符 (`n) 和制表符 (`t) 等不可
打印字符。拆分字符串时,将从所有子字符串中省略定界符。示例:

"Lastname:FirstName:Address" -split ":"
Lastname
FirstName
Address


指定返回的子字符串的最大数目。默认设置为通过定界符拆分出的所有子字符串。
如果子字符串数目大于最大数目,多出的子字符串将合并到最后一个子字符串中。如果子字符串数目
小于最大数目,将返回所有子字符串。使用 0 值或负值时将返回所有子字符串。

如果向拆分运算符提交多个字符串(一组字符串),Max-substrings 限制将单独应用于每个字符串。示例:

$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" $c
-split ",", 5
Mercury
Venus
Earth
Mars
Jupiter,Saturn,Uranus,Neptune



用于指定定界符应用规则的表达式。该表达式的计算结果必须是 $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 参数的语法为:

"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 ) 的优先级高于
逗号。因此,如果向一元拆分运算符提交逗号分隔的字符串列表,将只拆分第一个字符串(第一个逗号之前的部分)。

要拆分多个字符串,请使用二元拆分运算符 ( -split )。可将所有字符串都括在圆括号
内,
或在变量中存储这些字符串,然后向拆分运算符提交该变量。

请看以下示例:

-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

相关文档
最新文档