【问题标题】:PowerShell Split a String On First Occurrence of Substring/CharacterPowerShell在第一次出现子字符串/字符时拆分字符串
【发布时间】:2014-10-12 13:04:09
【问题描述】:

我有一个字符串,我想分成两部分。第一段在逗号之前(,),第二段在逗号之后(包括逗号)。

我已经设法检索到变量$Header 中逗号之前的第一段,但我不知道如何检索一个大字符串中第一个comma 之后的段。

$string = "Header text,Text 1,Text 2,Text 3,Text 4,"

$header = $string.Split(',')[0] # $Header = "Header text"

$content = "Text 1,Text 2,Text 3,Text 4," 
# There might be more text then visible here, like say Text 5, Text 6, ..

【问题讨论】:

    标签: string powershell split


    【解决方案1】:

    尝试类似:

    $Content=$String.Split([string[]]"$Header,", [StringSplitOptions]"None")[1]
    

    当您根据字符串进行拆分时,您使用的是函数split 的不同签名。

    基本用法只需要 1 个参数,一个分隔符(例如,可以在 here 找到有关它的更多信息)。但是,要使用字符串,签名如下:

    System.String[] Split(String[] separator, StringSplitOptions options)
    

    这就是为什么您必须将字符串转换为字符串数组的原因。在这种情况下,我们使用None 选项,但您可以在split 文档中找到其他可用选项。

    最后,由于$Heasder, 的值位于$String 的开头,因此您需要捕获结果数组的第二个成员。

    【讨论】:

    • 感谢您的帮助 Ploutox,我在上面的示例中尝试了您的建议,但变量 $Content 保持为空。很奇怪..
    • @DarkLite1 抱歉,我在发布之前没有尝试我的答案。用字符串分割与用字符分割有点不同。我会相应地编辑我的答案
    • 谢谢,与此同时,我在 Microsoft 的帮助下找到了以下($String -split ",",2)[1],这似乎可以满足我的需求。
    【解决方案2】:

    此替代解决方案利用 PowerShell 的能力,通过一次赋值将数组分配给多个变量。但是请注意,-split 运算符会在每个逗号上拆分,并且 PowerShell 的内置从 Array 转换回 String 会导致元素重新连接在一起。所以它的效率不如String.Split,但在你的例子中,它可以忽略不计。

    $OFS = ','
    $Content = 'Header text,Text 1,Text 2,Text 3,Text 4,'
    
    [String]$Header,[String]$Rest = $Content -split $OFS
    
    $OFS = ' '
    Write-Host "Header = $Header"
    Write-Host "Rest   = $Rest"
    

    最后,$OFS 是 PowerShell 中的一个特殊变量,用于确定将数组元素连接回单个字符串时将使用哪个字符。默认情况下,它是一个空格。但它可以更改为任何内容。

    【讨论】:

      【解决方案3】:

      PowerShell 的-split 运算符支持指定要返回的最大子字符串数,即要返回多少子字符串。在要拆分的模式之后,给出您想要返回的字符串数:

      $header,$content = "Header text,Text 1,Text 2,Text 3,Text 4," -split ',',2
      

      【讨论】:

      • 感谢 Aaron,这就是我现在使用的,您可以在 8 月 19 日 13:09 的“评论”中看到。
      • @DarkLite 哎呀。我没看到。
      • 没关系,没问题。任何帮助都将不胜感激。
      • 非常感谢@AaronJensen 的小费
      • 请注意,您正在拆分“。”然后添加一个'\'。 $header,$content = "标题文本.文本 1.文本 2.文本 3.文本 4。" -split '\.',2
      【解决方案4】:

      Aaron 的方法是最好的,但我提出了我的解决方案

      $array="Header text,Text 1,Text 2,Text 3,Text 4," -split ','
      $array[0],($array[1..($array.Length -1)] -join ",")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 1970-01-01
        • 2021-01-29
        • 2021-08-10
        • 2011-03-29
        相关资源
        最近更新 更多