以前网页信息提取的时候,其中有很多时候要提取网页文字中的一些联系方式,主要就是手机,电话和email
这几个正则表达式写到这里,算是一个笔记吧,分享给需要的朋友,不一定通用,但可以解决大部分问题
1,正则
- 手机://D0?(1//d{10})(//D|$)
- 电话://D((//+86-)?((0//d{2,3}//-)?//d{7,8}))(//D|$)
- Email://w+([-+.]//w+)*@//w+([-.]//w+)*//.//w+([-.]//w+)*
手机reg只提取手机号码,电话reg只提取电话
2,测试代码:
- String str = "电话:13668978333";
- String reg = "//D0?(1//d{10})(//D|$)";
- String tel = t.getValue(str, reg);
- // str = "电话:0370-6541114[白天]电话0370-6541000[晚上]";
- // str = "电话:0734-6570769,小灵通5386568";
- // str = "电话:13402158967";
- // str = "电话:+86-0734-63702731 手机:...";
- // str = "市场办公电话-010-82238887";
- reg = "//D((//+86-)?((0//d{2,3}//-)?//d{7,8}))(//D|$)";
- tel = t.getValue(str, reg);
- System.out.println(tel);
- String str = "电话:13668978333";
- String reg = "//D0?(1//d{10})(//D|$)";
- String tel = t.getValue(str, reg);
- // str = "电话:0370-6541114[白天]电话0370-6541000[晚上]";
- // str = "电话:0734-6570769,小灵通5386568";
- // str = "电话:13402158967";
- // str = "电话:+86-0734-63702731 手机:...";
- // str = "市场办公电话-010-82238887";
- reg = "//D((//+86-)?((0//d{2,3}//-)?//d{7,8}))(//D|$)";
- tel = t.getValue(str, reg);
- System.out.println(tel);
3,getValue方法
- /**
- * 得一正则表达对应的内容
- *
- * @param con
- * @param reg
- * @return
- */
- private String getValue(String con, String reg){
- Pattern p = Pattern.compile(reg);
- Matcher m = p.matcher(con);
- String res = "";
- while (m.find()) {
- res = m.group(1);
- logger.debug(res);
- }
- return res;
- }
- /**
- * 得一正则表达对应的内容
- *
- * @param con
- * @param reg
- * @return
- */
- private String getValue(String con, String reg){
- Pattern p = Pattern.compile(reg);
- Matcher m = p.matcher(con);
- String res = "";
- while (m.find()) {
- res = m.group(1);
- logger.debug(res);
- }
- return res;
- }
注意:如果目标字串以数字开头,要求目标字串必须以非数字开头(即号码前至少要有一个字符,在实际当中,这是非常可能的)
我一直想写一个如果一目标字串以号码开头,号码前没有字符(像str = "134777766666")或者是有字符但不是//d字符(像str = "电话:134777766666"),即兼顾这两种情况,但由于能力有限,一直写不出来
如果如位技术大牛能留下正确的reg,不胜感激
闲下来又改进了一下手机和电话的正则
- 手机:(?<!//d)0?(1//dquesauthor)(?!//d)
- 电话:(?<!//d)((//+86-)?((0//d{2,3}//-)?//d{7,8}))(?!//d)
- 手机:(?<!//d)0?(1//dquesauthor)(?!//d)
- 电话:(?<!//d)((//+86-)?((0//d{2,3}//-)?//d{7,8}))(?!//d)
这样就可以直接用目标串形如: str="010-12345678"; 的字串
不要求前面有字符