You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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 "|"时,相当于匹配「空字符串或空字符串」,这会把原字符串的每个字符(包括|本身)都拆分开。
  • 波浪线~不是正则元字符,会被当作普通文本处理,所以能正确按~分割字符串。

解决方法

要让|被当作普通字符拆分,有几种方式:

  1. 转义正则元字符:用反斜杠\转义|
$text1 -split "\|"
  1. 将|放入正则字符组:字符组[ ]内的元字符会失去特殊含义
$text1 -split "[|]"
  1. 启用简单匹配模式:指定[RegexOptions]::SimpleMatch参数,让-split按普通文本匹配分隔符
$text1 -split "|", 0, [RegexOptions]::SimpleMatch
  1. 使用字符串的.Split()方法:这个方法默认按普通字符拆分,不使用正则
$text1.Split("|")

以上四种方式的输出结果都会符合你的预期:

abc
def

内容的提问来源于stack exchange,提问作者Kibbage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 02:49:57