2016-07-15 5 views
0

(Javaプログラミングを使用して)パターンにマッチさせたいですが、その部分だけが必要です。ように、しかし、数字のペアのみを返す -正規表現 - パターンは一致しますがサブパターンは返されます

例...次のテキストから:

0 - Amount: 3 - Class 29 
1 - Amount: 2 - Class 21 
2 - Amount: 11 - Class 1 

私はパターン「クラス\ dが* \ D *金額」と一致します出力は配列のようなものです:

{ 
    {3, 29}, 
    {2, 21}, 
    {11, 1} 
} 

Javaの正規表現で実装されたものを使ってもいいですか?私は一致する文字列を検索する必要はないと思う、正規表現は何かこの種の問題の準備ができているようだ。

...正規表現には一般的に(Javaの正規表現だけでなく)それに対応するツールが用意されているため、一致する文字列から情報を抽出するために追加のプログラミングは必要ありませんか?他のいくつかの正規表現の実装がこの仕事のjavaより優れているなら、私はプログラミング言語を切り替えることが可能です。

+0

のJava正規表現は、グループのキャプチャをサポートしています。 –

答えて

1

あなたは自分の正規表現で括弧を使用してグループをキャプチャ使用する必要があります。

Amount: (\d*) - Class (\d*) 
     ^--^-- Here---^---^ 

Regular expression visualization

Working demo

次にあなたが\1\2とそれらのコンテンツをつかむために持っています。 javaではmatcher.group(n)を使用する必要があります。たとえば、あなたがこのようなコードを持つことができます。

String str = "0 - Amount: 3 - Class 29\n1 - Amount: 2 - Class 21\n2 - Amount: 11 - Class 1"; 

Pattern pattern = Pattern.compile("Amount: (\\d*) - Class (\\d*)"); 
Matcher matcher = pattern.matcher(str); 

StringBuffer sb = new StringBuffer("{"); 
while (matcher.find()){ 
    sb.append(String.format("{%s, %s},", matcher.group(1), matcher.group(2))); 
} 
sb.setLength(sb.length()-1); // remove last comma 
sb.append("}"); 

System.out.println(sb.toString()) 

Full IdeOne code

+0

これは、2番目のキャプチャグループの単語「クラス」にも一致しています。私は彼が数字をほしいと思う。 –

+1

@m_callens申し訳ありませんが、タイプミスがありました。いくつかのコードで答えを更新していた。それを指摘してくれてありがとう –

+0

フィーチャーの名前は「グループのキャプチャー」です。そして、私はちょうどオンライン正規表現テスターと言語コンパイラについて学びました。ありがとう!!! –

関連する問題