【问题标题】:Drop last section of string in powershell在powershell中删除字符串的最后一部分
【发布时间】:2014-03-28 00:17:42
【问题描述】:

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

"Monkey/Zebra/Bird/Bird"

我可以使用下面的代码来捕捉结尾的“鸟”:

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

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

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

"Monkey/Zebra/Bird"

“动物”的数量会有所不同,因此我无法硬编码要查找的字符数或“/”。

【问题讨论】:

    标签: string powershell path split trim


    【解决方案1】:

    使用带有 -replace 的正则表达式:

    $text = "Monkey/Zebra/Bird/Bird"
    
    $text -replace '/[^/]+$'
    
    Monkey/Zebra/Bird
    

    【讨论】:

    • 这很优雅,但对正则表达式进行解释会有所帮助,以便人们理解它为什么起作用。
    【解决方案2】:

    我可能也会使用正则表达式,但如果您想使用拆分:

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

    我喜欢 Perl...errr Powershell

    【讨论】:

      【解决方案3】:

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

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

      然后这将分割路径并依次处理每个动物

      【讨论】:

        【解决方案4】:

        我首先要说明的是,RegEx 可能是您最快的答案。那就是……

        另一种方法,使用拆分,只获取每种动物之一,因为您的示例是从“猴子/斑马/鸟/鸟”中解析出重复的“鸟”

        $Animals = "Monkey/Zebra/Bird/Bird"
        
        ($Animals.Split('/')|Select -Unique) -join '/'  
        

        或者,如果您只想删除最后一部分,您可以按照 EBGreen 的建议进行操作,将其拆分为单个动物,计算它们,返回除最后一个之外的所有动物,然后将它们重新连接在一起。

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

        其中任何一个都将返回 Monkey/Zebra/Bird,但如果您喜欢后者,请将答案归于 EBGreen。

        【讨论】:

          【解决方案5】:
          $path = "Monkey/Zebra/Bird/Bird"
          $path -replace '/\w+$'
          Monkey/Zebra/Bird
          

          【讨论】:

            猜你喜欢
            • 2012-09-01
            • 2013-08-05
            • 1970-01-01
            • 2020-04-19
            • 1970-01-01
            • 2020-10-09
            • 2012-05-13
            • 2020-11-23
            相关资源
            最近更新 更多