经常用到的提取手机、电话、Email联系方式的几个java正则表达式


以前网页信息提取的时候,其中有很多时候要提取网页文字中的一些联系方式,主要就是手机,电话和email
这几个正则表达式写到这里,算是一个笔记吧,分享给需要的朋友,不一定通用,但可以解决大部分问题

1,正则

[java:firstline[1]] view plain copy
  1. 手机://D0?(1//d{10})(//D|$)   
  2. 电话://D((//+86-)?((0//d{2,3}//-)?//d{7,8}))(//D|$)   
  3. Email://w+([-+.]//w+)*@//w+([-.]//w+)*//.//w+([-.]//w+)*   

手机reg只提取手机号码,电话reg只提取电话

2,测试代码:


[java:firstline[1]] view plain copy
  1. String str = "电话:13668978333";   
  2. String reg = "//D0?(1//d{10})(//D|$)";   
  3. String tel = t.getValue(str, reg);   
  4.   
  5. // str = "电话:0370-6541114[白天]电话0370-6541000[晚上]";   
  6. // str = "电话:0734-6570769,小灵通5386568";   
  7. // str = "电话:13402158967";   
  8. // str = "电话:+86-0734-63702731 手机:...";   
  9. // str = "市场办公电话-010-82238887";   
  10. reg = "//D((//+86-)?((0//d{2,3}//-)?//d{7,8}))(//D|$)";   
  11. tel = t.getValue(str, reg);   
  12. System.out.println(tel);   
  13. String str = "电话:13668978333";  
  14. String reg = "//D0?(1//d{10})(//D|$)";  
  15. String tel = t.getValue(str, reg);  
  16.   
  17. // str = "电话:0370-6541114[白天]电话0370-6541000[晚上]";  
  18. // str = "电话:0734-6570769,小灵通5386568";  
  19. // str = "电话:13402158967";  
  20. // str = "电话:+86-0734-63702731 手机:...";  
  21. // str = "市场办公电话-010-82238887";  
  22. reg = "//D((//+86-)?((0//d{2,3}//-)?//d{7,8}))(//D|$)";  
  23. tel = t.getValue(str, reg);  
  24. System.out.println(tel);   

3,getValue方法

[java:firstline[1]] view plain copy
  1. /**  
  2. * 得一正则表达对应的内容  
  3.  
  4. * @param con  
  5. * @param reg  
  6. * @return  
  7. */   
  8. private String getValue(String con, String reg){   
  9. Pattern p = Pattern.compile(reg);   
  10. Matcher m = p.matcher(con);   
  11. String res = "";   
  12. while (m.find()) {   
  13. res = m.group(1);   
  14. logger.debug(res);   
  15. }   
  16. return res;   
  17. }   
  18. /** 
  19. * 得一正则表达对应的内容 
  20.  
  21. * @param con 
  22. * @param reg 
  23. * @return 
  24. */  
  25. private String getValue(String con, String reg){  
  26. Pattern p = Pattern.compile(reg);  
  27. Matcher m = p.matcher(con);  
  28. String res = "";  
  29. while (m.find()) {  
  30. res = m.group(1);  
  31. logger.debug(res);  
  32. }  
  33. return res;  
  34. }   

注意:如果目标字串以数字开头,要求目标字串必须以非数字开头(即号码前至少要有一个字符,在实际当中,这是非常可能的)
我一直想写一个如果一目标字串以号码开头,号码前没有字符(像str = "134777766666")或者是有字符但不是//d字符(像str = "电话:134777766666"),即兼顾这两种情况,但由于能力有限,一直写不出来
如果如位技术大牛能留下正确的reg,不胜感激

闲下来又改进了一下手机和电话的正则

[java:firstline[1]] view plain copy
  1. 手机:(?<!//d)0?(1//dquesauthor)(?!//d)   
  2. 电话:(?<!//d)((//+86-)?((0//d{2,3}//-)?//d{7,8}))(?!//d)   
  3. 手机:(?<!//d)0?(1//dquesauthor)(?!//d)   
  4. 电话:(?<!//d)((//+86-)?((0//d{2,3}//-)?//d{7,8}))(?!//d)   

这样就可以直接用目标串形如: str="010-12345678"; 的字串
不要求前面有字符


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值