affempire 发表于 2017-12-1 00:08:03

求助从大文本中提取邮件地址

本人有一个1G大的文本文件,里面是一些乱七八糟的文字,但是有部分邮箱地址 ,我想把这些邮箱地址提取出来 ,有什么好办法吗?试了好几个提取工具,连文本都打不开,打开文本超过5M就没反应了,有更好的办法吗?江湖救急!!谢谢!!!

qiqinjun 发表于 2017-12-1 00:14:04

PHP 一行一行的读取 然后从每一行里面正则表达式去匹配邮箱 应该是可以搞定的

l890908 发表于 2017-12-1 08:30:59

1G分分钟搞定

行书 发表于 2017-12-1 08:39:37

[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?
这个正则可以匹配,不过具体要用其他工具来实现匹配。

idea2money 发表于 2017-12-1 08:50:15

懂点编程的话用读取字节的IO函数读取加转换处理,3个G大小没问题,再大就用内存映射的方法。

不懂编程的话先将大文本分割成很多个小文件,再用你找到的那些工具处理。

syoi489 发表于 2017-12-1 09:46:01

hadoop,3个t也能给你搞了

我是c罗 发表于 2017-12-1 10:31:22

写个正则匹配。。。。

shenpig 发表于 2017-12-1 12:07:47

各显神通.~~我就找个漂亮的小妹 让她慢慢处理吧...:lol:lol:lol

affempire 发表于 2017-12-1 12:28:08

大神真多啊!有没有现成的工具推荐一下?自己编程太麻烦了

行书 发表于 2017-12-1 13:09:44

http://tool.oschina.net/regex#
本来想自己写一个python脚本,不过中午折腾rb格式,没折腾出来。
目前手动比较方便一点的就是,把内容放到上面这个正则工具里,点击右边的匹配邮箱,然后点击测试匹配。下面邮箱就全部匹配了。
鼠标移动上去,拉取,选中,复制到其他txt,excel里。搞定。

妖妖 发表于 2017-12-1 13:31:21

EDITPLUS+正则

affempire 发表于 2017-12-1 17:15:30

大神们 是1G的文本文件 不可能手工粘贴上去。更不是一个文本编辑器能处理的

alibaba 发表于 2017-12-3 21:25:04

EmEditor(文本编辑器)。官方说的处理248G的文件也不在话下。然后用正则表达式把非邮箱的字符替换为空白,把邮箱留下就可以了。

affempire 发表于 2017-12-3 23:01:50

alibaba 发表于 2017-12-3 21:25
EmEditor(文本编辑器)。官方说的处理248G的文件也不在话下。然后用正则表达式把非邮箱的字符替换为空白, ...

大神能给个正则表达式替换的例子吗?

bjzhush 发表于 2017-12-4 00:39:19

本帖最后由 bjzhush 于 2017-12-4 00:45 编辑

花了几分钟帮你写了下
例如源文件为这个txt
➜~ cat x.txt
hitest
[email protected]
[email protected] test
[email protected]@qq.com
执行后,得到result.txt
➜~ cat result.txt
[email protected]
[email protected]
[email protected]
[email protected]

代码如下:
<?php
$file = 'x.txt';
$fp = fopen($file, 'r');
if (!$fp) {
    exit('failed to open'.$file);
}
$lineNumber = 0;
while($line = fgets($fp)) {
    $lineNumber++;
    $pattern = '/+@+\.({2,4})(?:\.{2})?/i';
    preg_match_all($pattern, $line, $matches);
    if (!empty($matches)) {
      foreach ($matches as $mail) {
            echo $mail.' found from line '.$lineNumber.PHP_EOL;
            file_put_contents('result.txt', $mail.PHP_EOL, FILE_APPEND);
      }
    }
}
echo "All Done";
功能:支持提取一行多个email地址,结果全部保存到result.txt ,没有做去重
使用:代码里面的源文件是x.txt ,可以换成你自己的文件名,php保存为getMail.php然后php getMail.php 结果保存在result.txt里面
页: [1] 2
查看完整版本: 求助从大文本中提取邮件地址