从String中提取电话号码

时间:2015-04-03 02:30:12

标签: java regex string

我发现的其他答案对我所拥有的字符串不起作用。我的字符串看起来像这样:

Tel.: 123 12 12 31 12\nMobil: 0173 84 44 962\nE-Mail: info@email.com

我已经足够让我得到第一个发生的电话号码。文本是一个自由文本,所以人们可以实际放置他们想要的东西,甚至根本没有数字。

我试过这个

    Pattern pattern = Pattern.compile("^[a-zA-Z]+([0-9]+).*");
    Matcher matcher = pattern.matcher(contactText);
    if (matcher.find()) {
        phoneLabel.setText(matcher.group(0));
    }

这个正则表达式适用于德国数字

^(((((((00|\+)49[ \-/]?)|0)[1-9][0-9]{1,4})[ \-/]?)|((((00|\+)49\()|\(0)[1-9][0-9]{1,4}\)[ \-/]?))[0-9]{1,7}([ \-/]?[0-9]{1,5})?)$

4 个答案:

答案 0 :(得分:4)

要匹配示例中的电话号码,请使用:

(?:\d+\s*)+

See the Demo


try {
    Pattern regex = Pattern.compile("(?:\\d+\\s*)+");
    Matcher regexMatcher = regex.matcher(contactText);
    if (regexMatcher.find()) {
        phoneLabel.setText(regexMatcher.group(0));
    }
} catch (PatternSyntaxException ex) {
    // Syntax error
}

答案 1 :(得分:2)

查看Google的libphonenumber图书馆。

它非常易于使用,并且比手写正则表达式更灵活,因为它知道国家特定的规则并且可以规范化解析的电话号码。

答案 2 :(得分:0)

测试了你的给定字符串

  

电话:123 12 12 31 12 \ nMobil:0173 84 44 962 \ nE-Mail:info@email.com

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

答案 3 :(得分:-2)

试试这个。

Pattern pattern = Pattern.compile("[0-9 ]+");

虽然不完全正确。它可以在你的情况下使用。不要忘记删除所有空白。