2012-02-27 76 views
2

如果我有一個包含以下內容的字符串:這是1個試驗123-456-7890
我需要提取的電話號碼。我不想提取測試前的數字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

你到目前爲止嘗試過什麼?您的要求有點含糊不清,因爲我不知道以下內容是否會通過「123456 1234567890」。除非你可以格式化你的輸入,否則你會努力讓你的輸出正確(因爲它看起來你有一個自由類型的輸入) – radimpe 2012-02-27 11:39:52

回答

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)); 
} 

但是,在其他的答案,許多電話號碼中指出(特別是沒有國際的)不匹配該模式。

+0

非常感謝!這是我有豆搜索的代碼! – Wael 2012-02-27 11:53:11

2
(\d{3})-(\d{3})-(\d{4}) 

將發現XXX-XXX-XXXX,如果你需要其他的組合,調整{X}的多少個號碼你想看到諸如XXXXXXXXXX(\ d {10})

下面是關於如何使用正則表達式,並得到結果與代碼的例子:

http://www.exampledepot.com/egs/java.util.regex/BasicMatch.html

+0

我不只是想找到或看看它是否存在,我已經知道如何做到這一點。但我的問題是將結果(電話號碼)保存到一個新的變量 – Wael 2012-02-27 11:41:04

+0

所以你不要求正則表達式,你問如何在java中使用正則表達式。問題是,你有什麼嘗試,併發布代碼。 – Churk 2012-02-27 11:42:41

+1

@Wael:將它添加到您的問題中,請勿將它置於評論中。 – ohaal 2012-02-27 11:45:36

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的數字。

+0

這是一個很好的問題。當我發佈我的答案時,我甚至沒有考慮過國際號碼。 – Churk 2012-02-27 11:43:36

+0

答案在哪裏? – stema 2012-02-27 11:45:20

+0

不,我只需要處理1種格式,即NNN-NNN-NNNN – Wael 2012-02-27 11:50:08

6

最好的和標準的方法是使用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()); 
    } 
} 
+0

值得一提的是這個lib來自Google,所以...你有這個想法。 – 2015-07-15 13:11:49

1

mobile_number = PhoneNumberUtils.stripSeparators(mobile);

PhoneNumberUtils類爲電話號碼格式化操作提供了不同的功能。使用stripSeparators功能,您可以刪除所有類型的格式並獲取確切的整數。