neb*_*lus 0 regex csv arrays perl
我有一条线:
$string = 'Paul,12,"soccer,baseball,hockey",white';
Run Code Online (Sandbox Code Playgroud)
我试着将其拆分为具有4个值的@array
print $array[2];
Run Code Online (Sandbox Code Playgroud)
给
soccer,baseball,hockey
我怎么这样?救命!
sin*_*ish 11
只需使用Text :: CSV即可.正如您从源代码中看到的那样,正确地进行CSV解析非常复杂:
sub _make_regexp_split_column {
my ($esc, $quot, $sep) = @_;
if ( $quot eq '' ) {
return qr/([^\Q$sep\E]*)\Q$sep\E/s;
}
qr/(
\Q$quot\E
[^\Q$quot$esc\E]*(?:\Q$esc\E[\Q$quot$esc\E0][^\Q$quot$esc\E]*)*
\Q$quot\E
| # or
[^\Q$sep\E]*
)
\Q$sep\E
/xs;
}
Run Code Online (Sandbox Code Playgroud)
标准模块Text :: ParseWords也会这样做.
my @array = parse_line(q{,}, 0, $string);
Run Code Online (Sandbox Code Playgroud)
响应如何使用 Text::CSV(_PP) 执行此操作。这是一个快速的。
#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV_PP;
my $parser = Text::CSV_PP->new();
my $string = "Paul,12,\"soccer,baseball,hockey\",white";
$parser->parse($string);
my @fields = $parser->fields();
print "$_\n" for @fields;
Run Code Online (Sandbox Code Playgroud)
通常一个人会安装Text::CSV或Text::CSV_PP通过该cpan实用程序。
为了解决您无法安装模块的问题,我建议您使用“纯 Perl”实现,以便您可以“安装”它。假设您将Text::CSV_PP源的文本复制到名为CSV_PP.pm在Text与脚本相同的目录中创建的文件夹中命名的文件中,上述示例将起作用。您也可以将它放在其他位置并使用use lib 'directory'前面讨论过的方法。请参阅此处和此处以查看使用 CPAN 模块绕过安装限制的其他方法。
| 归档时间: |
|
| 查看次数: |
10131 次 |
| 最近记录: |