2017-03-05 9 views
0

数字をスペースで区切る数に関係なく、テキストから完全な電話番号を抽出できます。通路内例えばregexを使用して異なる場所にスペースが挿入された電話番号を取得する

I think Emily was her name, and that her number was either 0421032614 or 0423 032 615 or 04321 98 564 

私が抽出したいと思います:

0421032614 
0423032615 
0432198564 

私は

(\d{4}[\s]?)(\d{3}[\s]?)+ 

を使用して最初の2を抽出することができます。しかし、これは私に偶発的です10個の数字がどのようにグループ分けされるかを事前に知っている(つまり、スペースがどこにあるか)。より柔軟なパターンで10個の数字をキャプチャする方法はありますか?あなたはすべての空白を削除する必要が

+3

2つの段階でそれを行うようにしてくださいですの間に任意の量のスペースを入れた2桁のチャンクを作成します(より正確な '' \ d(?:\ s * \ d){9} '(https://regex101.com/r/rF6w3H/1) \ b \ d(?:\ s * \ d){9} \ b')、次に2)空白を削除します。 –

+1

各桁をグループ間にオプションの空白を入れたグループと考えてください。グループとまったく同じですが、数字は1桁です。また、長くても短い番号(誰でも911人)と国際番号で何をすべきかを決めることができます。私のものは+49で始まります。 –

+0

ありがとう@ウィクスター・ストライツ私はRegexにはかなり新しいです。キャプチャグループ '(?:\ s * \ d)'の '?'と ':'の機能について説明できますか? – llewmills

答えて

0

は、forループを実行し、グループを反復処理:1)10を抽出:

public static void main (String [] args){ 
    String reg = "(\\d{10})"; 
    String word = " think Emily was her name, and that her number was either 0421032614 or 0423 032 615 or 04321 98 564"; 

    word = word.replaceAll("\\s+",""); // replace all the whitespace with nothing 

    Pattern pat = Pattern.compile(reg); 
    Matcher mat = pat.matcher(word); 

    while (mat.find()) { 
     for (int i = 1; i <= mat.groupCount(); i++) { 
      System.out.println(mat.group(i)); 
     } 
    } 

} 

出力は

0421032614 
0423032615 
0432198564 
関連する問題