为何PowerShell中使用|执行-split时行为异常?
为什么PowerShell中用竖线
|拆分字符串会和波浪线~结果不同? 你的脚本:
$text1 = "abc|def" $text2 = "abc~def" Write-Host ("text1 is: ", $text1) $text1 -split "|" Write-Host ("text2 is: ", $text2) $text2 -split "~"
运行后text1的拆分结果:
a b c | d e f
text2的拆分结果:
abc def
原因
PowerShell的-split运算符默认以正则表达式作为分隔符规则:
- 竖线
|是正则表达式中的元字符,代表「逻辑或」,作用是匹配|左边或右边的内容。当你直接写-split "|"时,相当于匹配「空字符串或空字符串」,这会把原字符串的每个字符(包括|本身)都拆分开。 - 波浪线
~不是正则元字符,会被当作普通文本处理,所以能正确按~分割字符串。
解决方法
要让|被当作普通字符拆分,有几种方式:
- 转义正则元字符:用反斜杠
\转义|
$text1 -split "\|"
- 将
|放入正则字符组:字符组[ ]内的元字符会失去特殊含义
$text1 -split "[|]"
- 启用简单匹配模式:指定
[RegexOptions]::SimpleMatch参数,让-split按普通文本匹配分隔符
$text1 -split "|", 0, [RegexOptions]::SimpleMatch
- 使用字符串的
.Split()方法:这个方法默认按普通字符拆分,不使用正则
$text1.Split("|")
以上四种方式的输出结果都会符合你的预期:
abc def
内容的提问来源于stack exchange,提问作者Kibbage
相关产品推荐
相关产品推荐

