首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

用java正则表达式从字符串中提取号码,有点有关问题,请问。

2012-06-16 
用java正则表达式从字符串中提取号码,有点问题,请教。。。假如有以下的字符串:骗子的电话是13944447777和0768

用java正则表达式从字符串中提取号码,有点问题,请教。。。
假如有以下的字符串:
骗子的电话是13944447777和076812345678,银行帐号:62240755123456780 身份证:4744134123456789

我使用正则表达式提前号码时,把银行帐号、身份证中符合号码(红色)一起提取出来了。。。
我的正则表达式:

Java code
//判断电话号码必须是0开头,第二位不能为0,加上1位或2为数字作为区号,加上-可有可无,最后为7或8位号码//手机号码是13或15开头Pattern pattern = Pattern.compile("0[^0]\\d{1,2}[-]?\\d{7,8}|13\\d{9}|15\\d{9}");Matcher matcher = pattern.matcher(text);String tmp = "";while (matcher.find()) {  tmp += matcher.group() + ",";}//这样肯定是把匹配号码都提取出来了。//改正一下正则表达式,匹配的号码前后加上了\D (非数字):\D0[^0]\d{1,2}[-]?\d{7,8}\D|\D13\d{9}\D|\D15\d{9}\D//最后我还做了些处理,省略。。。


大家帮忙提供下正则表达式,或其它处理的方法。。。






[解决办法]
Java code
package test;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 提取指定字串中的电话和手机号码 * @author yeyong */public class PickUpPhone {  private final static Pattern pattern = Pattern.compile("(?<!\\d)(?:(?:1[35]\\d{9})|(?:0[1-9]\\d{1,2}-?\\d{7,8}))(?!\\d)");  /**   * 提取text中的电话和手机号码   * @param text   * @return   */  public static String pickUp(String text) {    Matcher matcher = pattern.matcher(text);    StringBuffer bf = new StringBuffer(64);    while (matcher.find()) {      bf.append(matcher.group()).append(",");    }    int len = bf.length();    if (len > 0) {      bf.deleteCharAt(len - 1);    }    return bf.toString();  }  public static void main(String[] args) {    String text = "骗子的电话是13944447777和076812345678,银行帐号:2240755123456780 身份证:4744134123456789,  错误的号码139444477771(多了一位)";    String phones = PickUpPhone.pickUp(text);    System.out.println(phones);    // 输出:    // 13944447777,076812345678  }} 

热点排行
Bad Request.