问题是分隔符/ 会被输入字符串中的/ 的每次出现 分割,因此https://split.string.com 中的// 会导致额外的空 生成的标记数组中的元素(两个 / 字符之间的空字符串。),这是索引 [1] 返回的内容。
在 PowerShell [Core] 6+ 中,只需使用 // 作为分隔符:
PSCore> 'https://split.string.com'.split('//')[1].split('.')[0]
split
这在 Windows PowerShell 中不起作用,但是,因为底层 .NET Framework 不支持按单个 [string] 实例进行拆分(相反,它的单个字符 被解释为分隔符)。
在那里,您可以简单地考虑额外的空元素并相应地调整索引,正如Olaf 建议的那样:
WinPS> 'https://split.string.com'.split('/')[2].split('.')[0]
split
注意:通过可选参数消除空条目也可以,但既冗长又晦涩:'https://split.string.com'.split('/', [StringSplitOptions]::RemoveEmptyEntries)[1].Split('.')[0]
替代方法是使用 PowerShell 的基于正则表达式的 -split operator,这通常优于 [string] 类型的.Split() 方法 并且适用于两个 PowerShell 版本:
PS> ('https://split.string.com' -split '//|\.')[1]
split
Regex //|\. 匹配 (|) 字符串 // 或文字 .(转义为 \.,因为 . 本身在正则表达式中具有特殊含义)。
有关背景信息,请参阅 this answer,包括为什么坚持使用 PowerShell 原生功能可以防止由于稍后引入新的 .NET 方法重载而导致无意的行为变化。