【问题标题】:Getting first two strings between slashes在斜杠之间获取前两个字符串
【发布时间】:2020-05-17 13:48:14
【问题描述】:

我有一个字符串,alpha/beta/charlie/delta

我正在尝试提取字符串alpha/beta,包括正斜杠。

我可以通过拆分并加入第一个和第二个结果来完成此操作,但我觉得正则表达式可能更适合。

取决于有多少斜线也将决定我需要抓取多少字符串,例如如果有 4 个斜线,则获取前两个字符串,如果有 5 个,则获取前三个。同样,我的问题是用字符串提取斜线。

【问题讨论】:

  • 根据总斜线数提取多少令牌背后的确切逻辑是什么?
  • Split+Join 是一个完全有效的解决方案!

标签: regex powershell


【解决方案1】:

正如 Mathias 已经注意到的那样 - Split+Join 是一个非常有效的解决方案:

$StringArray = @(
    'alpha/beta/charlie/delta',
    'alpha/beta/charlie/delta/omega'
    'alpha/beta/charlie/gamma/delta/omega'
)
foreach ($String in $StringArray) {
    $StringSplit = $String -split '/'
    ($StringSplit | Select-Object -First ($StringSplit.Count - 2) ) -join '/'
}

【讨论】:

    【解决方案2】:

    有点长,但我没有使用正则表达式:

    $string = 'alpha/beta/charlie/delta/gamma'
    
    # Count number of '/'
    $count = 0
    
    for( $i = 0; $i -lt $string.Length; $i++ ) {
        if( $string[ $i ] -eq '/' ) {
            $count = $count + 1
        }
    }
    
    # Depending on the number of '/' you can create a mathematical equation, or simply do an if-else ladder.
    # In this case, if count of '/' = 3, get first 2 strings, if count = 4, get first 3 strings.
    
    function parse-strings {
        Param (
            $number_of_slashes,
            $string
        )
    
        $all_slash  = $number_of_slashes
        $to_get     = $number_of_slashes - 1
        $counter    = 0
    
        for( $j = 0; $j -lt $string.Length; $j++ ) {
            if( $string[ $j ] -eq '/' ) {
                $counter = $counter + 1
            }
            if( $counter -eq $to_get ) {
                ( $string[ 0 .. ( $j - 1 ) ] -join "" )
                break
            }
        }
    }
    
    parse-strings -number_of_slashes $count -string $string
    

    【讨论】:

      【解决方案3】:

      您可以尝试 .split() .net 方法,您可以在括号中定义拆分位置(在哪个字符上)。

      然后使用连接运算符“-join”来连接数组中的元素

      对于您关心的问题,请像这样使用它:

      $string = 'alpha/beta/charlie/delta/gamma'
      $string = $string.split('/')
      $string = "$($string[0])" + "/" + "$($string[1])"
      $string
      

      等等……

      【讨论】:

        猜你喜欢
        • 2016-04-21
        • 2015-07-28
        • 1970-01-01
        • 1970-01-01
        • 2013-06-10
        • 2016-01-30
        • 2023-01-07
        • 1970-01-01
        • 2018-07-31
        相关资源
        最近更新 更多