Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Powershell:在多个字符上拆分_Regex_Powershell - Fatal编程技术网

Regex Powershell:在多个字符上拆分

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]

在Powershell(v2,如果有关系的话)中,是否可以对分隔符字符的可变长度字符串进行拆分?我的输入文件由行组成,其中每个字段由一个或多个制表符分隔,以保持列的整洁。没有前导选项卡。我认为您可以在分隔符规范中使用正则表达式,因此我尝试:

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。