我在Outlook中有一个非常大的帐户,大约有2万封电子邮件,我需要从这些电子邮件中提取电话号码。
电子邮件的一个例子是:
From: Amy Schwartz <amy@blahdyblah.com>
Dear Anatoliy,
I want you to do blahdy blahdy blah.
Amy Schwartz
(347) 555-1212 <---- I want this
Blahdy Blah Company
我们的想法是浏览每封电子邮件,并通过正则表达式匹配最后一个电话号码,并按以下格式导出列表:
您对如何做到这一点有什么想法吗?
更新:没有找到任何预先构建的解决方案,但我正在攻击我自己的using this。 codeTwo Outlook Express。您可以将任何电子邮件字段(正文,HTML正文,从名称)导出为CSV。它有点慢(我的i7 iMac上运行Win7 VM的消息是3秒)。但它的工作原理:)从那里我可能只是放入一个数据库并做一些正则表达式的魔法。一旦完成,我会发布过程。
答案 0 :(得分:0)
想出来。如果您知道如何制作Node.js脚本(但我确信您可以在Bash中编写一个),这非常简单。
1)使用Outlook Export插件将您的所有电子邮件导出为CSV。确保电子邮件是第一列,名称是第二列,而正文(文本)是第3列。
2)在Node 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秒)。
如果您有任何建议(或将其打包成可下载的可执行文件),请告诉我。