我可以使用管道在连续两次上使用拆分



假设我有以下字符串dog.puppy/cat.kitten/bear.cub。我只想获得bear。我可以执行以下操作来做到这一点:

$str = "dog.puppy/cat.kitten/bear.cub"
$str = $str.split('/')[2]
$str = $str.split('.')[0]

我可以使用管道使用一行使用bear吗?这是行不通的,但这就是这样:

$str = "dog.puppy/cat.kitten/bear.cub"
$str = $str.split('/')[2] | $_.split('.')[0]

我可以使用一行使用管道?

来获得"熊"

使用字符串已经存储在内存中, no 使用 pipeline 的充分理由只会放慢速度。

相反类似地命名为 .net [string]类型的方法,因为它们 regexes (正则表达式)上操作,并且也可以在整个数组
PS> ('dog.puppy/cat.kitten/bear.cub' -split '[/.]')[-2]
bear

也就是说,将输入字符串按字面的/或字面的.(使用字符集,[...]),然后返回倒数第二个(第二)([-2])令牌。

请参阅此答案,以了解为什么您通常应该更喜欢-split 运算符而不是String.Split() 方法
同样,同样适用于更喜欢-replace操作员而不是String.Replace()方法。


很容易这些操作员

PS> ('dog.puppy/cat.kitten/bearOneTwoThree.cub' -split '[/.]')[-2] -csplit '(?=p{Lu})'
bear
One
Two
Three

也就是说,返回倒数倒数的令牌并拆分case- case-敏感性(使用-split操作员的-csplit变化),每当大写字母(p{Lu})开始使用正面的sastertion,(?=...)。

您可以做到这一点:

$str = "dog.puppy/cat.kitten/bear.cub".split('/')[2].split('.')[0]

不需要管道。

有一个更轻松的解决方案,
.split()方法使用每个字符进行拆分,
使用负面索引计数,因此

> "dog.puppy/cat.kitten/bear.cub".split( '/.')[-2]
bear

您可以使用A
的基于REGEX的-csplit操作员来解决其他问题不耗费积极的lookahead和
最终的-join ' ',将数组元素与空间相连。

$str = "dog.puppy/cat.kitten/bearOneTwoThree.cub"
$str = $str.split('/.')[-2] -csplit '(?=[A-Z])' -join ' '
$str
bear One Two Three

最新更新