【问题标题】:Regex - How to split this string in two parts正则表达式 - 如何将此字符串分成两部分
【发布时间】:2022-01-20 05:00:21
【问题描述】:

我想把这个字符串分成两部分:

C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe /P {28B89EEF-4356-0409-0100-CF3F3A09B77D} /M AOEM /language en-US

我希望它总是在Setup.exe 之后分裂,所以应该是:

$part1 = "C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe"
$part2 = "/P {28B89EEF-4356-0409-0100-CF3F3A09B77D} /M AOEM /language en-US"

应该有什么功能来做到这一点?

谢谢

【问题讨论】:

  • 您可以在.exe 之后第一次出现空格时拆分:$string -split '(?<=^.*\.exe)\s'

标签: regex string powershell split


【解决方案1】:
$string = "C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe /P {28B89EEF-4356-0409-0100-CF3F3A09B77D} /M AOEM /language en-US" 
$array = $string -Split "(Setup.exe)"
$array[0]+$array[1]
$array[2]

还有其他简单的方法。这是一种方法。

【讨论】:

    【解决方案2】:

    这里有一些可供您选择的选择:

    $string = 'C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe /P {28B89EEF-4356-0409-0100-CF3F3A09B77D} /M AOEM /language en-US'
    

    方法一:使用-split

    $part1, $part2 = $string -split '^(.+\.exe)\s(.+)$'
    $part1   # --> C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe
    $part2   # --> /P {28B89EEF-4356-0409-0100-CF3F3A09B77D} /M AOEM /language en-US
    

    方法二:使用[regex].Match()

    $part1, $part2 = ([regex]'(?i)^(.+\.exe)\s(.+)$').Match($string).Groups[1..2].Value
    $part1   # --> C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe
    $part2   # --> /P {28B89EEF-4356-0409-0100-CF3F3A09B77D} /M AOEM /language en-US
    

    方法3:使用-replace结合方法.Split()

    $part1, $part2 = ($string -replace '^(.+\.exe)\s(.+)$', '$1|$2').Split('|')
    $part1   # --> C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe
    $part2   # --> /P {28B89EEF-4356-0409-0100-CF3F3A09B77D} /M AOEM /language en-US
    

    方法四:使用字符串方法.IndexOf().Substring()

    $split = $string.IndexOf('.exe')
    if ($split -ge 0) {
        $part1 = $string.Substring(0, $split + 4)
        $part2 = $string.Substring($split + 5)
    }
    
    $part1   # --> C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe
    $part2   # --> /P {28B89EEF-4356-0409-0100-CF3F3A09B77D} /M AOEM /language en-US
    

    【讨论】:

      【解决方案3】:

      只是分割空白并将它们重新组合在一起。根据您作为 -argumentlist 或与呼叫运算符的用途,您甚至可能不必将 $part2 数组连接在一起。

      $string = 'C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe /P {28B89EEF-4356-0409-0100-CF3F3A09B77D} /M AOEM /language en-US'
      $split = -split $string
      
      $split
      C:\Program
      Files\Autodesk\DWG
      TrueView
      2021
      -
      English\Setup\en-us\Setup\Setup.exe
      /P
      {28B89EEF-4356-0409-0100-CF3F3A09B77D}
      /M
      AOEM
      /language
      en-US
      
      $part1 = $split[0..5] -join ' '
      $part2 = $split[6..$split.length] -join ' '
      # $part2 = $split[6..$split.length]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-07
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多