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

前端之家收集整理的这篇文章主要介绍了如何使用正则表达式在Perl中解析引用的CSV?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用引号解析CSV数据时遇到了一些问题.我的主要问题是一个字段中的引号.在以下示例中,第1-4行正确工作,但5,6和7不正常.
COLLOQ_TYPE,COLLOQ_NAME,COLLOQ_CODE,XDATA
S,"BELT,FAN",003541547,S,"BELT V,000324244,SHROUD SPRING SCREW,000868265,"D" REL VALVE ASSY,000771881,"YBELT,"V"",000323030,'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 / sub目录中,以便与您的项目一起安装推出.

如果您无法在项目中存储文本文件,那么我想知道如何编码您的项目.

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

应该是一个很好的指导,如何让他们进入当地的工作状态.

不使用CPAN真的是灾难的秘诀.

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

Text::CSV是超过一百行代码,包括固定的错误和边缘案例,并从头开始重写这只会让你学到如何糟糕的CSV可以是艰难的方式.

注意:我学到了这个难题.在我发现在后来的版本中添加了一个内置的文件之后,让我一整天都能在PHP中获得一个工作的CSV解析器.真的很可怕

猜你在找的正则表达式相关文章