我在Powershell中找到了很多方法来使用split()
来捕获字符串的各个部分,但我对此感到难过。使用下面的示例字符串:
"Monkey/Zebra/Bird/Bird"
我可以使用以下代码捕获结尾的“Bird”:
$path = "Monkey/Zebra/Bird/Bird"
$animal = $path.split("/")[-1]
我的最终目标是能够捕获字符串的前面,而不是最后一次“拆分”,所以要输出:
"Monkey/Zebra/Bird"
“动物”的数量会有所不同,所以我不能硬编码字符数或“/”来查找。
答案 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