用java正则表达式从字符串中提取号码,有点问题,请教。。。
假如有以下的字符串:
骗子的电话是13944447777和076812345678,银行帐号:62240755123456780 身份证:4744134123456789
我使用正则表达式提前号码时,把银行帐号、身份证中符合号码(红色)一起提取出来了。。。
我的正则表达式:
//判断电话号码必须是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//最后我还做了些处理,省略。。。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 }}