2012-02-27 27 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

答えて

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

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

XXX-XXX-XXXXを見つけるあなたが他の組み合わせが必要な場合は、のために{X}を調整します

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

0:どのように多くの数字あなたはXXXXXXXXXXような見てみたい(\ dは、{10})

ここ

は、正規表現を使用して結果を取得する方法上のコードと例です。電話番号ための単一の普遍的に受け入れ形式の大会がないため、すべての

+0

それが存在するかどうかを見つけるだけでなく、 。しかし、私の問題は新しい変数に結果(電話番号)を保存することです – Wael

+0

したがって、正規表現を求めていないので、Javaで正規表現を使用する方法を尋ねます。質問は、何を試して、コードを投稿したかです。 – Churk

+1

@Wael:あなたの質問にそれを加え、コメントには入れないでください。 – ohaal

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-()]+)$に行きます。これは行末から一致します。

そうでなければ、私は十分な長さのエントリごとに1つだけのマッチ(私はあなたがあなたのデータのエントリの境界のいくつかの並べ替えを持っていると仮定)(9+文字があることを([0-9-()]+)希望のすべての出現箇所を検索します)を電話番号にしてそれを選択します。

どちらの方法も、extの数字を受け入れません。

+0

それは良い質問です。私は私の答えを投稿するときに国際的な数字を考慮しませんでした。 – Churk

+0

答えはどこですか? – stema

+0

いいえ私はちょうどNNN-NNN-NNNNである1つのフォーマットを扱う必要があります – Wael

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のものだと言えるでしょうので、あなたはそのアイディアを得ました。 –

1

MOBILE_NUMBER = PhoneNumberUtils.stripSeparators(モバイル)です。

PhoneNumberUtilsクラスは、電話番号の書式設定操作に異なる機能を提供します。 stripSeparators関数を使用すると、すべてのタイプの書式を削除して正確な整数を取得できます。

関連する問題