如何使用正则表达式提取字符串的电话号码?

时间:2012-02-27 11:33:52

标签: java regex string

如果我有一个包含以下内容的字符串:这是1测试123-456-7890
我需要提取 1234567890 作为电话号码。我不想提取测试前的数字1。
我怎么能在java中使用正则表达式呢?

我知道一种方法,但我不确定它是否是最好的解决方案:

String inputString = "This is 1 test 123-456-7890";
string result =  inputString.replaceAll("(\\d{3})-(\\d{3})-(\\d{4})",""); 
String phoneNumber = inputString.replace(result, "");

5 个答案:

答案 0 :(得分:9)

最好和最标准的方法是使用libphonenumber。您可以使用findNumbers功能。这是一段代码片段

public static void  extractPhoneNumber(String input){


    Iterator<PhoneNumberMatch> existsPhone=PhoneNumberUtil.getInstance().findNumbers(input, "IN").iterator();

    while (existsPhone.hasNext()){
        System.out.println("Phone == " + existsPhone.next().number());
    }
}

答案 1 :(得分:6)

首先,请注意,没有简单的方法可以正确地使用正则表达式 ,因为没有单一的普遍接受的格式约定电话号码

例如,以下所有内容都是格式正确的电话号码:

+1-555-2345
+358(0)1234567
02 500 500
+31 44 55 66 77
123-456-7890
+82 (0) 77 233 ext. 3456
(09) 223 44 ext 123

我确信还有更多的格式是本地惯例。

如果文本行上的电话号码后面没有任何内容,我会转到.*[^0-9-( )] ([0-9-( )]+)$,该行与行尾相匹配。

否则,我会搜索([0-9-( )]+)希望的所有出现,每个条目只有一个匹配 (我想你有某种条目(数据中的边界)足够长(9个以上字符)作为电话号码并选择它。

这两种方法都不接受其中包含ext的数字。

答案 2 :(得分:6)

以下代码将检查您提及的字符串中的电话号码并打印出来:

String str = "This is 1 test 123-456-7890";

Pattern pattern = Pattern.compile("\\d{3}-\\d{3}-\\d{4}");
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
    System.out.println(matcher.group(0));
}

但是,正如其他答案所指出的那样,许多电话号码(特别是国际电话号码)与该模式不符。

答案 3 :(得分:2)

(\d{3})-(\d{3})-(\d{4})

将找到xxx-xxx-xxxx,如果您需要其他组合,请调整{x}以查看您想看多少个数字,例如xxxxxxxxxx(\ d {10})

以下是一个示例,其中包含有关如何使用正则表达式和获取结果的代码:

http://www.exampledepot.com/egs/java.util.regex/BasicMatch.html

答案 4 :(得分:1)

mobile_number = PhoneNumberUtils.stripSeparators(mobile);

PhoneNumberUtils类为电话号码格式化操作提供不同的功能。使用stripSeparators函数,您可以删除所有类型的格式并获得精确的整数。