-join 和 -split 用法

时间:2023-03-09 22:25:04
-join 和 -split 用法

具体可参考 PowerShell_ISE的帮助文件:

-Join(一元联接运算符):

一元联接运算符 (-join <string[]>) 的优先级高于逗号。因此,如果向一元联接运算符提交逗号分隔的字符串列表,则只有第一个字符串(第一个逗号之前的部分)才会提交给联接运算符。
若要使用一元联接运算符,请将字符串用圆括号括起,或将字符串存储在变量中,然后提交该变量以进行联接。
例如:

-join "a", "b", "c"
返回结果:
a
b
c

-join ("a", "b", "c")
返回结果:
abc

$z = "a", "b", "c"
-join $z
返回结果:
abc

"Windows", "PowerShell", "2.0" -join " "  #返回结果:Windows PowerShell 2.0

$a = "Windows", "PowerShell", "2.0"

-join $a  #返回结果:WindowsPowerShell2.0

$a -join ";"  #返回结果:Windows;PowerShell;2.0

$b='@
a
b
c
@'

(-split $b) -join ""  #返回结果:abc

-Split:(-cSplit 区分大小写)

一元拆分运算符 (-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 = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"

$c -split ",", 5 #使用逗号为分隔符,一共最多返回5行,剩下的会都在最后一行显示

#返回结果:

Mercury
Venus
Earth
Mars
Jupiter,Saturn,Uranus,Neptune

$c -split {$_ -eq "e" -or $_ -eq "p"}  #使用 e 或者 p 为分隔符

#返回结果:

M
rcury,V
nus,
arth,Mars,Ju
it
r,Saturn,Uranus,N

tun

"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[et]'  #使用e 或者 t为分隔符

#返回结果:

M
rcury,V
nus,
ar
h,Mars,Jupi

r,Sa
urn,Uranus,N
p
un

"a,b,c,d,e,f,g,h" -split ",", 3  #使用逗号拆分为3个子字符串

#返回结果:

a
b
c,d,e,f,g,h

"a,b,c,d", "e,f,g,h" -split ",", 3  #将两个字符串分别拆分为3个子字符串

#返回结果:

a
b
c,d
e
f
g,h

$a = @'
1The first line.
2The second line.
3The third of three lines.
'@
$a -split "^\d", 0, "multiline"  #按第一个数字拆分$a中的每一行。
该语句使用 Multiline 选项来识别每一行和每一个字符串的开头。
0 值表示 Max-substrings 参数的"全部返回"值。仅当指定 Max-substrings 值时才能使用如 Multiline 等选项。
使用 Multiline 模式可识别行和字符串的开头和结尾。仅当与 RegexMatch 一起使用时有效。默认设置为 Singleline,使用 Singleline 模式只识别字符串的开头和结尾

#返回结果:
The first line.
The second line.
The third of three lines.