我的电话号码范围看起来像" + 7312xxxx - + 7657xxxx"(x和 - 之间的空格可能是或不是)。我需要剪切这个字符串并使用" 7312xxxx"和" 7657xxxx"。我尝试一步一步,char by char,但它非常愚蠢和努力,我想我可以用regexp看起来像这样做
String somestring="+7312xxxx - +7657xxxx";
String[] array=somestring.split("\someregexppattern");
但我不知道如何构建真正的正则表达式。请告诉我它是怎么做的。
编辑:感谢所有帮助我并给我答案的人,但知道我想知道哪种方式更快?使用正则表达式或通过" - "?
进行拆分答案 0 :(得分:4)
你可以试试下面的正则表达式,
^([^-]*)-(.*)$
java正则表达式将是,
"^([^-]*)-(.*)$"
首先捕获的组包含-
之前的所有数字,第二个捕获的组包含-
之后的所有数字
仅获取没有空格的第一个和第二个数字
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
答案 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