如何提取单个CSV字段,该字段是以逗号分隔的电子邮件地址列表

时间:2017-12-01 19:04:34

标签: perl csv

我想要一行CSV数据中的电子邮件地址,但列表中包含逗号。

因此我也在字段中拆分内容,这意味着我无法控制该字段的内容,因为我只知道如何使用split命令执行此操作。

示例数据:

12/01/2017, billybob123, billybob@bobthebomb.com, roxy@roxmysox.com, joey@rosytosy.com, AB, tom@tomsticles.com, \\123\abc
    # Open file for read

    while ( my $fileLine = <READ> ) {
        chomp $fileLine;
        my @row = (split ',', $fileLine);
        print $fileLine[3]\n\n";
      }

我使用$fileLine[3]。我想要的结果是

roxy@roxmysox.com, joey@rosytosy.com

但我得到

roxy@roxmysox.com

此字段中以逗号分隔的电子邮件地址的数量是动态的。

1 个答案:

答案 0 :(得分:3)

首先,您的CSV输入已损坏。包含逗号的字段必须用引号括起来。如果您无法更改输入格式,我建议采用以下方法:

  1. 使用标准CSV解析器。这将为您提供单独字段中的每封电子邮件。
  2. 对于电子邮件字段,从正确的索引(示例中的第三个字段)开始,只要字段“#34;看起来&#34;”,就会累积字段值。像一个电子邮件地址。网上很容易找到电子邮件地址正则表达式。
  3. 当您遇到一个看起来不像电子邮件的字段时,请验证它看起来与您期望的方式相同,然后将该字段和以下字段视为第四个和后续字段,而不管它们的实际索引位置如何。< / LI>