正则表达式从字符串获取电话号码掩码

时间:2014-07-04 07:08:42

标签: java regex string

我的电话号码范围看起来像" + 7312xxxx - + 7657xxxx"(x和 - 之间的空格可能是或不是)。我需要剪切这个字符串并使用" 7312xxxx"和" 7657xxxx"。我尝试一步一步,char by char,但它非常愚蠢和努力,我想我可以用regexp看起来像这样做

String somestring="+7312xxxx - +7657xxxx";
String[] array=somestring.split("\someregexppattern");

但我不知道如何构建真正的正则表达式。请告诉我它是怎么做的。

编辑:感谢所有帮助我并给我答案的人,但知道我想知道哪种方式更快?使用正则表达式或通过" - "?

进行拆分

3 个答案:

答案 0 :(得分:4)

你可以试试下面的正则表达式,

^([^-]*)-(.*)$

java正则表达式将是,

"^([^-]*)-(.*)$"

DEMO

首先捕获的组包含-之前的所有数字,第二个捕获的组包含-之后的所有数字

仅获取没有空格的第一个和第二个数字

String s = "+7312xxxx - +7657xxxx";
    Pattern p = Pattern.compile("^([^\\s-]*)\\s*-\\s*(.*)$");
    Matcher m = p.matcher(s);
    while (m.find()) {
      System.out.println(m.group(1));
      System.out.println(m.group(2));
    }

输出:

+7312xxxx
+7657xxxx

Ideone

答案 1 :(得分:0)

我的正则表达式非常基本,所以可能有更好的方法,但像( )?-( )?这样的空格( )是可选组可能有帮助,例如......

String pattern = "( )?-( )?";
String values = "+7312111111 - +7312222222-+7312333333-+7312444444- +7312555555 -+7312666666";
String parts[] = values.split(pattern);
for (String part : parts) {
    System.out.println(part);
}

输出......

+7312111111
+7312222222
+7312333333
+7312444444
+7312555555
+7312666666

如果空格的数量未知,或者您只能使用([ ]+)?-([ ]+)?-结果,您甚至可以使用trim之类的内容,例如......

String values = "+7312111111 - +7312222222-+7312333333-+7312444444- +7312555555 -+7312666666   -   +731277777";
String parts[] = values.split("-");
for (String part : parts) {
    System.out.println(part.trim());
}

<强>更新...

您可以使用类似\+7312[0-9]+([ ]+)?-([ ]+)\+7657[0-9]+的内容来查找可能的匹配项...

String value = "+7312111111 - +7657222222-+7312333333-+7312444444- +7312555555 -+7312666666   -   +731277777";
Pattern p = Pattern.compile("\\+7312[0-9]+([ ]+)?-([ ]+)\\+7657[0-9]+");
Matcher m = p.matcher(value);
while (m.find()) {
    value = m.group();
}

对于每个匹配组,您可以使用value.split("-")将这两个元素分开,如前所述......

答案 2 :(得分:0)

您可以使用以下代码提取:

String somestring="+7312xxxx - +7657xxxx";
  somestring=somestring.replaceAll(" ", "");
  String[] array=somestring.split("-");
  for(String s : array)
  {
      System.out.println(s.substring(1));
  }

您也可以将值存储到变量中。

您将获得以下输出:

7312xxxx
7657xxxx