在Powershell中(如果重要,则为v2),是否可以拆分分隔符字符的可变长度字符串?我的输入文件由行组成,每个字段由一个或多个制表符分隔,以保持整齐的列。没有前导标签。我以为你可以在分隔符规范中使用正则表达式,所以我尝试了:
get-content $INFILE | foreach-object {
$LINE = $_.split("`t*");
$F1 = $LINE[0]
$F2 = $LINE[1]
$F3 = $LINE[2]
. . .
}
如果每个字段之间只有一个选项卡,则可以根据需要使用。如果有两个或更多,则每个被视为单独的分隔符,$ LINE的某些成员将保留为空。
答案 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+"