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

Wae*_*ael 3 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, "");
Run Code Online (Sandbox Code Playgroud)

Abh*_*der 10

最好和最标准的方法是使用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());
    }
}
Run Code Online (Sandbox Code Playgroud)


Kim*_*ais 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
Run Code Online (Sandbox Code Playgroud)

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

如果文本行上的电话号码后面没有任何内容,我会选择.*[^0-9-( )] ([0-9-( )]+)$,从该行的末尾开始匹配.

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

这些方法都不接受其中的数字ext.


use*_*876 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));
}
Run Code Online (Sandbox Code Playgroud)

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