PowerShell首次出现子串/字符时拆分字符串

时间:2014-08-19 12:19:24

标签: string powershell split

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

我已经设法在变量$Header中的逗号之前检索第一段,但我不知道如何在一个大字符串中的第一个comma之后检索这些片段,所以它包含

$Content = "Text 1,Text 2,Text 3,Text 4," 

此处可能会显示更多文字,例如文字5,文字6,...

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

$Header = $String.Split(',')[0] //<-- $Header = "Header text"

4 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分:3)

尝试类似:

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

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

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

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

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

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

答案 2 :(得分:0)

此备用解决方案利用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 :(得分:0)

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

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