邮件开发 中的邮箱地址提取!

如何在 几万行或者 几十万行的的 文件中 准确的获取到 邮箱地址 并把这些地址 输出!

注意

读取几十万行记得逐行读取,然后将返回的emailList拼接起来,不然一次性全部读取几十万行会GG

Code :

 /** * 域名后缀维护列表,为保证匹配准确度,仅匹配域名列表里有的邮箱 * 例如 sf@sf.ggadmin@,help@admin.sf.gg 都可以被正确匹配 * sf@sf.gggame@google.com 也可以正确拆分为 sf@sf.gg 和 game@google.com * 以下域名列表请自行按需添加, | 是间隔符 * * @param str 传入的含有邮箱的字符串 * @return emailList 已提取的邮箱列表 * @author Levey * @time 16/1/20 14:35 */ private static List getEmailListString str { //在此维护域名后缀表 String dn = "com|cn|org|com.cn|xyz|net|gg|gov.cn|love"; Pattern p = Pattern.compile"[\w[.-]]+@[\w[.-]]+\." + dn + ""; //邮箱验证 Matcher m = p.matcherstr; List<String> emailList = new ArrayList<>; while m.find { //update 2016-1-21 10:03:45 //去除包涵连续两个点的邮箱 if!m.group.contains".." { emailList.addm.group; } } return emailList; }

Test:

public static void mainString args[] { String str = "tencent.sf.gg@10000@qq.comghghghghg
" + "你好leveychen,lev;levey-chen@myema你aaa@this.gov.cn好il.gmail.com悲" + "剧help@admin.sf.gg了" + "啊m@levey.com.cnmnihao的都是</br>和<sf@sf.gggame@google.com>"; System.out.printlngetEmailListstr; }

Output:

10000@qq.com
aaa@this.gov.cn
help@admin.sf.gg
m@levey.com.cn
sf@sf.gg
game@google.com

update 2016/01/20 15:09:41
更新已知bug
极端情况下
com 和 co 域名无法正确识别,例如 my@email.comy@email.com
这会优先提取 com域名,然后再去匹配co 域名
abc@mail....com 也能被匹配


//update 2016-1-21 10:03:45
//去除包涵连续两个点的邮箱

百度 正则表达式

基本原理就是文本匹配,这个用正则表达式就好了:

[w!#$%&*+/=?^_`{|}~-]+?:.[w!#$%&*+/=?^_`{|}~-]+*@?:[w]?:[w-]*[w]?.+[w]?:[w-]*[w]?

如果数据量比较大,从效率方面考虑应使用fork/join去处理

发表评论

电子邮件地址不会被公开。 必填项已用*标注