1

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

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

如果每个字段之间只有一个选项卡,则它按要求工作。如果有两个或更多,则每个都被视为单独的分隔符,并且 $LINE 的某些成员留空。

4

3 回答 3

4

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

$f1,$f2,$f3 = $_.Split("`t",[System.StringSplitOptions]::RemoveEmptyEntries)
于 2013-04-23T12:57:47.917 回答
2

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

$DedupedLine  = $_ -replace '[\t]+',"`t" # Replace multi tabs with a single tab
$LINE  = $DedupedLine.split('`t')
于 2013-04-23T13:04:19.763 回答
1

除了使用 .NETstring.Split方法的选项之外,PowerShell-split运算符支持正则表达式,例如`t*

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

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

$F1,$F2,$F3,$rest = $_ -split "`t+"
于 2013-04-23T23:13:07.547 回答