3

我是 Perl 的新手,正在为学校做一个项目,但我被困住了。

输入:一个给定的文本文件,包含由空格、制表符、“、”、“;”分隔的电子邮件地址 或“:” [可以在不同的行上]。

我正在尝试读取电子邮件地址并将它们放入一个数组中。我可以在一行上解析数据,但是如果有换行符或返回,我只会得到最后一个元素。

有人可以帮我弄清楚如何将每个地址放在单独的行上并解析它们吗?我已经阅读了一些关于正则表达式的内容,但需要更多的练习。谢谢。

open(EmailAddresses, "EmailAdressesCommaList.txt") || die "Can not open file $!";

# 
while (<EmailAddresses>)
{
    chomp;
    # Split the line into words
    @lines = split /[ ,;:\t\r\n(\t\r\n\s)+?]/;
}

foreach $value (@lines)
{
    print $value . "\n";
}
4

3 回答 3

7
open(EmailAddresses, "EmailAdressesCommaList.txt") || die "Can not open file $!";
while(<EmailAddresses>) {
    chomp;
    push @lines, split /[ ,;:\t\r\n(\t\r\n\s)+?]/;
}
foreach $value (@lines) {
    print $value . "\n";
}

即问题不在于您的正则表达式,而在于您每次通过循环都覆盖@lines。

于 2009-03-23T19:35:17.570 回答
1

Chaos is correct. If you are going to open the text file and process it again in the same program remember to clear the array.

@lines = ();
于 2009-03-24T10:54:23.553 回答
1

正如混乱所指出的,您应该推入数组,而不是覆盖它,但是您的正则表达式也很奇怪。看来你想做:

/[ ,;:\t\r\n][\t\r\n\s]+/

但是,我认为这也可以:

/[,;:\s]+/
于 2009-03-23T22:35:41.427 回答