使用正则表达式从字符串中提取手机号码

时间:2019-06-18 18:54:54

标签: java android regex

我想从字符串中提取手机号码。
示例字符串为"Hi, Your Mobile no. is: 9876499321."

现在,我想从字符串中提取“ 9876499321”。我的主字符串可以在字符串中包含+919876499321或919876499321或09876499321以及其他单词。如何实现呢?

我想要的规则:

  1. 首先删除所有“-”
  2. 然后提取数字,范围从10位数到14位数(含)

我已经尝试过了:

String myregex = "^\\d{10}$";
Pattern pattern = Pattern.compile(myregex);
Matcher matcher = pattern.matcher(inputStr);

while (matcher.find()) {
    System.out.println(matcher.group());
}

我找不到任何匹配项。

2 个答案:

答案 0 :(得分:1)

您可以先删除所有连字符,然后再将字符串传递给pattern.matcher,然后匹配10到14位数字的独立数字:

String inputStr = "Hi, Your Mobile no. is: 9876499321. Also, +919876499321 or 919876499321 or 09-876499321.";   
String myregex = "(?<!\\d)\\d{10,14}(?!\\d)";
// Or String myregex = "\\b\\d{10,14}\\b";
Pattern pattern = Pattern.compile(myregex);
Matcher matcher = pattern.matcher(inputStr.replace("-", ""));

while(matcher.find()) {
    System.out.println(matcher.group());
}

请参见Java demo,输出:

9876499321
919876499321
919876499321
09876499321

(?<!\d)\d{10,14}(?!\d)模式仅在10到14位数字之间没有匹配时才匹配。

答案 1 :(得分:0)

如果始终是10位数以上的字符串的最后10位数,则可以执行以下操作:

String myregex = "^.*(\\d{10})([^\\d].*|$)";

并使用matcher.group(0)代替matcher.group()