我发现的其他答案对我所拥有的字符串不起作用。我的字符串看起来像这样:
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})?)$
答案 0 :(得分:4)
要匹配示例中的电话号码,请使用:
(?:\d+\s*)+
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 ]+");
虽然不完全正确。它可以在你的情况下使用。不要忘记删除所有空白。