2013-10-14 69 views
0

我正在嘗試編寫一個Perl腳本來解析一個充滿電子郵件和名稱的目錄,並提取一個電子郵件地址和相應的名稱。使用perl提取電子郵件ID和名稱

目前我正在解析單詞Email Address :,然後提取該行,但這是我卡住的地方。

的數據是按以下格式:

Name    :John van 

Email Address  :[email protected] 

我需要得到這個數據到像$name$email兩個變量。

有沒有更好的方法來解析文件來獲取電子郵件地址和名稱?我如何處理這些字符串並重新排列它們。

任何人都可以幫忙嗎?

+0

請給我們輸入文件的一小部分..然後我可以幫你。 –

+0

我已經提供了文件摘錄作爲例子在我的問題 – user2878260

回答

0

肯定有這樣做,但嘗試更簡單的方法:

從輸入:

Name: John Van 

Email Address: [email protected] 

Name: John Doe 

Email Address: [email protected] 


#!/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 [email protected] 
John Van [email protected] 
+0

我需要像這樣的:$ name = John van and $ email = [email protected] – user2878260

1

數據:(該\ n是隻爲理解隱含的)

Name    :John van\n 
\n 
Email Address  :[email protected]\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, 
      [email protected] 
     ] 

如果你想讓它基於行的事,我的做法是:(未測試 - sharpshoot):)

my @data = (
       'Name    :john van', 
       '', 
       'Email Address  :[email protected]', 
       '' 
      ); 
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; 
    } 
} 

有沒有更好的方法來解析文件以獲取電子郵件地址和 名稱?

作爲哪一個更好的方法?

如何處理字符串並重新排列它們。

是什麼問題?

相關問題