gpt4 book ai didi

regex - 如何使用正则表达式解析 Perl 中引用的 CSV?

转载 作者:行者123 更新时间:2023-12-03 23:59:52 26 4
gpt4 key购买 nike

我在解析带引号的 CSV 数据时遇到了一些问题。我的主要问题是字段内的引号。在下面的示例中,第 1 - 4 行正常工作,但第 5,6 和第 7 行没有。

COLLOQ_TYPE,COLLOQ_NAME,COLLOQ_CODE,XDATA
S,"BELT,FAN",003541547,
S,"BELT V,FAN",000324244,
S,SHROUD SPRING SCREW,000868265,
S,"D" REL VALVE ASSY,000771881,
S,"YBELT,"V"",000323030,
S,"YBELT,'V'",000322933,

我想避免使用 Text::CSV,因为它没有安装在目标服务器上 .意识到 CSV 比它们看起来更复杂,我正在使用 Perl Cookbook 中的食谱。
sub parse_csv {
my $text = shift; #record containg CSVs
my @columns = ();
push(@columns ,$+) while $text =~ m{
# The first part groups the phrase inside quotes
"([^\"\\]*(?:\\.[^\"\\]*)*)",?
| ([^,]+),?
| ,
}gx;
push(@columns ,undef) if substr($text, -1,1) eq ',';
return @columns ; # list of vars that was comma separated.
}

有没有人建议改进正则表达式来处理上述情况?

最佳答案

请尝试使用 CPAN

您没有理由不能下载 Text::CSV 的副本,或任何其他基于非 XS 的 CSV 解析器实现,并将其安装在您的本地目录或项目的 lib/子目录中,以便它与您的项目推出一起安装。

如果你不能在你的项目中存储文本文件,那么我想知道你是如何编码你的项目的。

http://novosial.org/perl/life-with-cpan/non-root/

应该是关于如何使这些在本地进入工作状态的一个很好的指南。

不使用 CPAN 真的会导致灾难。

请在尝试编写自己的 CSV 实现之前考虑这一点。

Text::CSV有一百多行代码,包括修复的错误和边缘情况,从头开始重新编写它只会让您了解 CSV 是多么糟糕的艰难方式。

注意:我以艰难的方式学到了这一点。我花了一整天的时间在 PHP 中获得了一个可以工作的 CSV 解析器,然后我发现在更高版本中添加了一个内置的解析器。这真的是一件很可怕的事情。

关于regex - 如何使用正则表达式解析 Perl 中引用的 CSV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/633607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com