Regex perl在“0”上拆分字符串&引用;

Regex perl在“0”上拆分字符串&引用;,regex,perl,split,Regex,Perl,Split,我正在尝试将从,上的CSV文件中读取的数百行数据拆分。例如: "Acme services","Sesame street","zip","0,56","2013-10-21" "Black adder, intra-national Association","shaftsville rd","zap code","0,50","2014-10-14" 等等 我可以在,上拆分第一行,但这对第二行不起作用。但是,如果我在,上拆分,那么我将捕获这些案例。然后我可以删除“使用简单正则表达式

我正在尝试将从
上的CSV文件中读取的数百行数据拆分。例如:

"Acme services","Sesame street","zip","0,56","2013-10-21"  
"Black adder, intra-national Association","shaftsville rd","zap code","0,50","2014-10-14"  
等等

我可以在
上拆分第一行,但这对第二行不起作用。但是,如果我在
上拆分,那么我将捕获这些案例。然后我可以删除“使用简单正则表达式(例如,
$col[I]=~s/\”+//g

我试过
@cols=split(/\“,\”/,$line)
,也试过
split(“,”,$line)
和各种变体,但每次我都在
$col[0]
中得到完整的
$line
,其中
$cols[1:n]
为空

任何帮助都将不胜感激!谢谢。

为什么不用呢。这将解决值中有逗号的边缘情况以及各种其他问题

从cpan页面

use Text::CSV;

my @rows;
my $csv = Text::CSV->new ( { binary => 1 } )  # should set binary attribute.
                or die "Cannot use CSV: ".Text::CSV->error_diag ();

open my $fh, "<:encoding(utf8)", "test.csv" or die "test.csv: $!";
while ( my $row = $csv->getline( $fh ) ) {
    $row->[2] =~ m/pattern/ or next; # 3rd field should match
    push @rows, $row;
}
$csv->eof or $csv->error_diag();
close $fh;

$csv->eol ("\r\n");

open $fh, ">:encoding(utf8)", "new.csv" or die "new.csv: $!";
$csv->print ($fh, $_) for @rows;
close $fh or die "new.csv: $!";

您是否考虑过使用解析器?
split/,/
是合适的,除非您的数据字段被引用,如这里所示。但对于任何更复杂的问题,该模块都是可取的。请注意,如果安装了
Text::CSV
,则将使用
Text::csvxs
(速度更快、基于C的模块)。否则,它将使用类似的纯Perl版本
Text::CSV\u PP
。在大多数情况下,两者都可以。@keepcalmand carryon谢谢。我已经在代码中成功地实现了Text::CSV。然而,它只是像以前一样在“,”上分裂。我已尝试将sep更改为“,”,即我的$csv=Text::csv\u XS->new({binary=>1,sep\u char=>“\”,\”);但在实施这一点上却没有成功。你能告诉我怎么做吗?我没有发现文档非常清晰,可能是因为我的Perl相当原始。谢谢更新答案。你到底想做什么?谢谢,我已经使用你的foreach(@$row){。我在使用$row->[I]时遇到了困难,尽管可能是代码中的其他地方出现了错误。
use strict;
use Text::CSV;

my @rows;

my $csv = Text::CSV->new ( { binary => 1 } )  # should set binary attribute.
                or die "Cannot use CSV: ".Text::CSV->error_diag ();

open my $fh, "<:encoding(utf8)", "a.txt" or die "a.txt: $!";
while ( my $row = $csv->getline( $fh ) ) {

    foreach(@$row){
        print "$_\n";
    }
    print "\n";
}
$csv->eof or $csv->error_diag();
close $fh;
Acme services
Sesame street
zip
0,56
2013-10-21

Black adder, intra-national Association
shaftsville rd
zap code
0,50
2014-10-14