如果我有一个包含以下内容的字符串:这是1测试123-456-7890
我需要提取 1234567890 作为电话号码。我不想提取测试前的数字1。
我怎么能在java中使用正则表达式呢?
我知道一种方法,但我不确定它是否是最好的解决方案:
String inputString = "This is 1 test 123-456-7890";
string result = inputString.replaceAll("(\\d{3})-(\\d{3})-(\\d{4})","");
String phoneNumber = inputString.replace(result, "");
答案 0 :(得分:9)
最好和最标准的方法是使用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());
}
}
答案 1 :(得分:6)
首先,请注意,没有简单的方法可以正确地使用正则表达式 ,因为没有单一的普遍接受的格式约定电话号码。
例如,以下所有内容都是格式正确的电话号码:
+1-555-2345
+358(0)1234567
02 500 500
+31 44 55 66 77
123-456-7890
+82 (0) 77 233 ext. 3456
(09) 223 44 ext 123
我确信还有更多的格式是本地惯例。
如果文本行上的电话号码后面没有任何内容,我会转到.*[^0-9-( )] ([0-9-( )]+)$
,该行与行尾相匹配。
否则,我会搜索([0-9-( )]+)
和希望的所有出现,每个条目只有一个匹配 (我想你有某种条目(数据中的边界)足够长(9个以上字符)作为电话号码并选择它。
这两种方法都不接受其中包含ext
的数字。
答案 2 :(得分:6)
以下代码将检查您提及的字符串中的电话号码并打印出来:
String str = "This is 1 test 123-456-7890";
Pattern pattern = Pattern.compile("\\d{3}-\\d{3}-\\d{4}");
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println(matcher.group(0));
}
但是,正如其他答案所指出的那样,许多电话号码(特别是国际电话号码)与该模式不符。
答案 3 :(得分:2)
(\d{3})-(\d{3})-(\d{4})
将找到xxx-xxx-xxxx,如果您需要其他组合,请调整{x}以查看您想看多少个数字,例如xxxxxxxxxx(\ d {10})
以下是一个示例,其中包含有关如何使用正则表达式和获取结果的代码:
http://www.exampledepot.com/egs/java.util.regex/BasicMatch.html
答案 4 :(得分:1)
mobile_number = PhoneNumberUtils.stripSeparators(mobile);
PhoneNumberUtils类为电话号码格式化操作提供不同的功能。使用stripSeparators函数,您可以删除所有类型的格式并获得精确的整数。