Powershell:分裂多个角色

时间:2013-04-23 12:43:20

标签: regex powershell

在Powershell中(如果重要,则为v2),是否可以拆分分隔符字符的可变长度字符串?我的输入文件由行组成,每个字段由一个或多个制表符分隔,以保持整齐的列。没有前导标签。我以为你可以在分隔符规范中使用正则表达式,所以我尝试了:

get-content $INFILE | foreach-object {
    $LINE = $_.split("`t*");
    $F1 = $LINE[0]
    $F2 = $LINE[1]
    $F3 = $LINE[2]
        . . .
}

如果每个字段之间只有一个选项卡,则可以根据需要使用。如果有两个或更多,则每个被视为单独的分隔符,$ LINE的某些成员将保留为空。

3 个答案:

答案 0 :(得分:4)

请尝试使用此重载。拆分方法不采用正则表达式模式,只有char(s)或string(s)。您还可以使用多个赋值并保存一些代码行:

$f1,$f2,$f3 = $_.Split("`t",[System.StringSplitOptions]::RemoveEmptyEntries)

答案 1 :(得分:2)

首先清理重复项,你应该没问题。

$DedupedLine  = $_ -replace '[\t]+',"`t" # Replace multi tabs with a single tab
$LINE  = $DedupedLine.split('`t')

答案 2 :(得分:1)

除了使用.NET string.Split方法的选项外,PowerShell -split运算符支持`t*等正则表达式:

PS> 'comma,separated,,values' -split ',+'
comma
separated
values

要访问每行的前三个字段,您可以使用:

$F1,$F2,$F3,$rest = $_ -split "`t+"