如果我有一个包含以下内容的字符串:这是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, "");
Run Code Online (Sandbox Code Playgroud)
Abh*_*der 10
最好和最标准的方法是使用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());
}
}
Run Code Online (Sandbox Code Playgroud)
首先,请注意,使用正则表达式没有简单的方法可以正确执行此操作,因为电话号码没有单一的普遍接受的格式约定.
例如,以下所有内容都是格式正确的电话号码:
+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
Run Code Online (Sandbox Code Playgroud)
我确信还有更多的格式是本地惯例.
如果文本行上的电话号码后面没有任何内容,我会选择.*[^0-9-( )] ([0-9-( )]+)$,从该行的末尾开始匹配.
否则,我会搜索所有出现的([0-9-( )]+)并希望每个条目只有一个匹配(我想你的数据中有某种条目边界)足够长(9个以上字符)作为电话号码并选择.
这些方法都不接受其中的数字ext.
以下代码将检查您提及的字符串中的电话号码并打印出来:
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));
}
Run Code Online (Sandbox Code Playgroud)
但是,正如其他答案所指出的那样,许多电话号码(特别是国际电话号码)与该模式不符.
| 归档时间: |
|
| 查看次数: |
15620 次 |
| 最近记录: |