2013-03-08 66 views
0

我在Outlook中有一個相當大的帳戶,裏面有大約20k個電子郵件,我需要從這些電子郵件中提取電話號碼。如何從Outlook中的電子郵件正文提取電話號碼?

電子郵件的一個例子是:

From: Amy Schwartz <[email protected]> 

Dear Anatoliy, 
I want you to do blahdy blahdy blah. 

Amy Schwartz 
(347) 555-1212 <---- I want this 
Blahdy Blah Company 

的想法是要經過的每一封電子郵件,並通過正則表達式匹配的最後一個電話號碼,並以下列格式導出列表:

  • 名稱:來自「From」字段的名稱
  • 電子郵件:來自「From」字段的電子郵件
  • 電話:電子郵件中匹配的最後一個電話號碼

對於如何去做這件事你有什麼想法嗎?

更新:沒有找到任何預先構建的解決方案,但我一起砍我自己的using this。 codeTwo Outlook Express。您可以將任何電子郵件字段(正文,HTML正文,從名稱)導出爲CSV。這有點慢(我運行Win7虛擬機的i7 iMac上有3秒鐘的消息)。但它的工作原理:)從那裏我可能只是把一個數據庫,並做一些正則表達式的魔力。一旦完成,我們將發佈流程。

+0

我建議先把它包含的數字不管它是什麼都行。如果你正在處理20K尺寸,我假設電話號碼可能是非常不同的形式。然後使用正則表達式來挑選任何只包含 - 或者)的數字。希望這可以幫助 – dekdev 2013-03-08 19:48:19

回答

0

想通了。如果你知道如何創建一個Node.js腳本(但我相信你可以在Bash中編寫一個腳本),這非常容易。

1)使用Outlook Export插件將所有電子郵件導出爲CSV。確保電子郵件是第一列,名稱是第二列,正文(文本)是第三列。

2)通過寫節點JS下面的腳本在同一目錄下,你的電子郵件

的CSV
var fs = require('fs'); 
var csv = require('csv'); 
csv() 
    .from.stream(fs.createReadStream(__dirname+'/data.csv')) 
    .to.path(__dirname+'/out.csv') 
    .transform(function(row){ 
     var match = row[2].match(/(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})/); 
     return '"' + row[0] + '","' + row[1] + '","' + (match ? match[0] : '') + '"\n'; 
    }) 
    .on('error', function(error){ 
     console.log(error.message); 
    }); 

,並使用node script.js運行它。

就是這樣!超快速運行(20k郵件約20秒)。

讓我知道,如果你有任何建議(或打包到這一個下載的可執行)

相關問題