1

私はJavaの正規表現に不慣れです。正規表現を使って文字列を抽出するのが好きです。

これは私の文字列です: "Hello、World"

「、」の後のテキストを抽出するのが好きです。結果は「世界」になります。私はこれを試しました:

final Pattern pattern = Pattern.compile(",(.+?)"); 
final Matcher matcher = pattern.matcher("Hello,World"); 
matcher.find(); 

しかし、次のステップは何でしょうか?

4

4 に答える 4

3

これには正規表現は必要ありません。カンマで分割して、配列から2番目の要素を取得できます。-

System.out.println("Hello,World".split(",")[1]);

出力:-

World

ただし、を使用する場合Regexは、正規表現から削除する必要があり?ます。

?after+Reluctantマッチングに使用されます。一致Wしてそこで停止するだけです。ここでは必要ありません。一致するまで一致する必要があります。

したがって、greedy代わりにマッチングを使用してください。

正規表現を変更したコードは次のとおりです。-

final Pattern pattern = Pattern.compile(",(.+)"); 
final Matcher matcher = pattern.matcher("Hello,World"); 

if (matcher.find()) {
    System.out.println(matcher.group(1));
}

出力:-

World
于 2012-10-12T13:22:04.887 に答える
1

あなたが持っているものを拡張するには、あなたは?を削除する必要があります パターンから署名して貪欲なマッチングを使用し、マッチングされたグループを処理します。

final Pattern pattern = Pattern.compile(",(.+)");       // removed your '?'
final Matcher matcher = pattern.matcher("Hello,World"); 

while (matcher.find()) {

    String result = matcher.group(1);

    // work with result

}

他の回答は、問題に対するさまざまなアプローチを示唆しており、必要なものに対してより良い解決策を提供する可能性があります。

于 2012-10-12T13:21:43.793 に答える
0
System.out.println( "Hello,World".replaceAll(".*,(.*)","$1") ); // output is "World"
于 2012-10-12T13:24:49.940 に答える
0

気が進まない表現を使用していて、1つの文字のみを選択しWますが、貪欲な表現を使用して、一致したグループのコンテンツを印刷することができます。

final Pattern pattern = Pattern.compile(",(.+)");
final Matcher matcher = pattern.matcher("Hello,World");
if (matcher.find()) {
   System.out.println(matcher.group(1));
}

出力:

World

正規表現パターンのドキュメントを参照してください

于 2012-10-12T13:25:20.160 に答える