在powershell中删除字符串的最后一部分

时间:2014-02-25 16:14:14

标签: string powershell path split trim

我在Powershell中找到了很多方法来使用split()来捕获字符串的各个部分,但我对此感到难过。使用下面的示例字符串:

"Monkey/Zebra/Bird/Bird"

我可以使用以下代码捕获结尾的“Bird”:

$path = "Monkey/Zebra/Bird/Bird"

$animal = $path.split("/")[-1]

我的最终目标是能够捕获字符串的前面,而不是最后一次“拆分”,所以要输出:

"Monkey/Zebra/Bird"

“动物”的数量会有所不同,所以我不能硬编码字符数或“/”来查找。

5 个答案:

答案 0 :(得分:4)

将正则表达式与-replace:

一起使用
$text = "Monkey/Zebra/Bird/Bird"

$text -replace '/[^/]+$'

Monkey/Zebra/Bird

答案 1 :(得分:0)

我也可能使用正则表达式,但是如果你想使用分割:

("Monkey/Zebra/Bird/Bird" -split '/')[0..((("Monkey/Zebra/Bird/Bird" -split '/').count)-2)] -join '\'

我喜欢Perl ... errr Powershell

答案 2 :(得分:0)

您可以为每个命令使用a,例如

$path = "Monkey/Zebra/Bird/Bird"
foreach($animal in $path.split("/"))
{
Write-Host $animal
}

这将分开路径并依次处理每只动物

答案 3 :(得分:0)

我在此之前提到RegEx可能是您最快的答案。那说......

另一种方法,使用split,只获得每只动物中的一只,因为你的例子是从“猴子/斑马/鸟/鸟”解析出重复的“鸟”

$Animals = "Monkey/Zebra/Bird/Bird"

($Animals.Split('/')|Select -Unique) -join '/'  

或者,如果您只想放弃最后一部分,您可以执行EBGreen建议的操作,将其分成单个动物,计算这些动物,返回除最后一个之外的所有动物,并将它们重新连接在一起。

($Animals.Split('/'))[0..($Animals.Split('/').count-2)] -join '/'

其中任何一个都会返回Monkey/Zebra/Bird,但如果你喜欢后面的选项,请将答案归功于EBGreen。

答案 4 :(得分:0)

$path = "Monkey/Zebra/Bird/Bird"
$path -replace '/\w+$'
Monkey/Zebra/Bird