Regex Powershell:在多个字符上拆分
在Powershell(v2,如果有关系的话)中,是否可以对分隔符字符的可变长度字符串进行拆分?我的输入文件由行组成,其中每个字段由一个或多个制表符分隔,以保持列的整洁。没有前导选项卡。我认为您可以在分隔符规范中使用正则表达式,因此我尝试:Regex Powershell:在多个字符上拆分,regex,powershell,Regex,Powershell,在Powershell(v2,如果有关系的话)中,是否可以对分隔符字符的可变长度字符串进行拆分?我的输入文件由行组成,其中每个字段由一个或多个制表符分隔,以保持列的整洁。没有前导选项卡。我认为您可以在分隔符规范中使用正则表达式,因此我尝试: get-content $INFILE | foreach-object { $LINE = $_.split("`t*"); $F1 = $LINE[0] $F2 = $LINE[1] $F3 = $LINE[2]
get-content $INFILE | foreach-object {
$LINE = $_.split("`t*");
$F1 = $LINE[0]
$F2 = $LINE[1]
$F3 = $LINE[2]
. . .
}
如果每个字段之间只有一个选项卡,则该选项卡将根据需要工作。如果有两个或多个分隔符,则每个分隔符都被视为一个单独的分隔符,$LINE的某些成员保留为空。请尝试使用此重载。split方法不采用正则表达式模式,只采用char或string。您还可以使用多重赋值并保存一些代码行:
$f1,$f2,$f3 = $_.Split("`t",[System.StringSplitOptions]::RemoveEmptyEntries)
试试这个重载。split方法不采用正则表达式模式,只采用char或string。您还可以使用多重赋值并保存一些代码行:
$f1,$f2,$f3 = $_.Split("`t",[System.StringSplitOptions]::RemoveEmptyEntries)
先把复制品清理干净,你就没事了
$DedupedLine = $_ -replace '[\t]+',"`t" # Replace multi tabs with a single tab
$LINE = $DedupedLine.split('`t')
先把复制品清理干净,你就没事了
$DedupedLine = $_ -replace '[\t]+',"`t" # Replace multi tabs with a single tab
$LINE = $DedupedLine.split('`t')
除了使用.NET方法的选项外,PowerShell操作符还支持正则表达式,如
`t*
:
PS>“逗号,分隔,值'-split',+”
逗号
分开的
价值观
要访问每行的前三个字段,可以使用:
$F1、$F2、$F3、$rest=$\拆分“`t+”
除了使用.NET方法的选项外,PowerShell操作符还支持正则表达式,如`t*
:
PS>“逗号,分隔,值'-split',+”
逗号
分开的
价值观
要访问每行的前三个字段,可以使用:
$F1、$F2、$F3、$rest=$\拆分“`t+”
您确定这不是因为*
?大多数正则表达式风格将使用这样的表达式匹配两次\t
:一次匹配\t
,另一次匹配空字符串。将其替换为+
(这是您想要的行为)。(当然,如果有几个\t
,它将首先匹配所有的\t,然后匹配一个空字符串)感谢您的想法,但是“`t+”的作用完全相同。您确定这不是因为*
?大多数正则表达式风格将使用这样的表达式匹配两次\t
:一次匹配\t
,另一次匹配空字符串。将其替换为+
(这是您想要的行为)。(当然,如果有几个\t
,它将首先匹配所有的\t,然后匹配一个空字符串)谢谢你的想法,但是“`t+”的作用完全相同。我假设$t,你的意思是$\是:)我的测试字符串足够令人惊讶,$t。我假设$t,你的意思是$\是:)我的测试字符串足够令人惊讶,$t。