使用perl提取电子邮件ID和名称

时间:2013-10-14 10:42:04

标签: perl email extract

我正在尝试编写一个Perl脚本来解析一个充满电子邮件和名称的目录,并提取一个电子邮件地址和相应的名称。

目前我正在解析单词Email Address :然后提取该行,但这就是我被困住的地方。

数据采用以下格式:

Name                :John van

Email Address       :john@abc.com

我需要将这些数据转换为两个变量,例如$name$email

有没有更好的方法来解析文件以获取电子邮件地址和名称?我如何处理字符串并重新安排它们。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

数据:( \ n只是隐含的理解)

Name                :John van\n
\n 
Email Address       :john@abc.com\n
\n

基于正则表达式:

use Data::Dumper;    
my @data = m/Name\s*:([A-Za-z\s]*)\n\nEmail Address\s*:([A-Za-z\s]*@[A-Za-z\s]*.[A-Za-z]*)\n/g;
print Dumper @data;

将给出

$VAR = [
           John van,
           john@abc.com
       ]

如果你想以行为基础,我的方法是:(未经测试 - sharpshoot):)

 my @data = (
                'Name                :john van',
                '',
                'Email Address       :john@abc.com',
                ''
            );
 my (@persons, $name, $email);
 my $gotName = 0;
 my $gotEmail = 0;
 while(@data) { # data is your read in filehandle
     if (/^Name/) {
         $name = $_;
         $name =~ s/.*://;
         chomp($name);
         $gotName++;
     }
     if (/^Email/) {
         $mail= $_;
         $mail=~ s/.*://;
         chomp($mail);
         $gotEmail++;
     }
     if ($gotName == 1 and $gotEmail == 1) {
         push(@persons, ($name,$email));
         $gotName = 0;
         $gotEmail = 0;
     }
}
  

有没有更好的方法来解析文件以获取电子邮件地址和   命名

一个更好的方式?

  

我如何处理字符串并重新排列。

问题是什么?

答案 1 :(得分:0)

肯定有一种更简单的方法可以做到这一点,但尝试:

来自输入:

Name:   John Van

Email Address:  john@abc.com

Name:   John Doe

Email Address:  johnD@123.com


#!/usr/bin/perl
use warnings;
use strict; 

my $emails = 'email.txt';
open my $input, '<', $emails or die "Can't open $emails: $!";

my (%data, @name, @email);
while(<$input>){
    push @name, $1 if /Name:\s+(.*)/;
    push @email, $1 if /Email Address:\s+(.*)/;
    $data{$name[$_]} = $email[$_] for 0 .. $#name;
}

for my $name (keys %data){
    my $email = $data{$name};
    print "$name\t$email\n"
}

输出:

John Doe    johnD@123.com
John Van    john@abc.com