Javaの文字列から重複する部分文字列を「減らす」正規表現を作成しようとしています。たとえば、以下の入力のために:文字列から重複した部分文字列を削除するJava正規表現
The big black dog big black dog is a friendly friendly dog who lives nearby nearby.
私は次の出力を取得したいのですが:
The big black dog is a friendly dog who lives nearby.
これは、これまで私が持っているコードです:ある
String input = "The big black dog big black dog is a friendly friendly dog who lives nearby nearby.";
Pattern dupPattern = Pattern.compile("((\\b\\w+\\b\\s)+)\\1+", Pattern.CASE_INSENSITIVE);
Matcher matcher = dupPattern.matcher(input);
while (matcher.find()) {
input = input.replace(matcher.group(), matcher.group(1));
}
文の最後を除いてすべての重複部分文字列に対してうまくいく:
The big black dog is a friendly dog who lives nearby nearby.
私の正規表現では、部分文字列の各単語の後に空白が必要であることを理解しています。つまり、空白ではなくピリオドを含むケースをキャッチしません。私はこれの回避策を見つけることができないようだ、私はキャプチャグループで遊んでみても、空白や空白の代わりにピリオドを探す正規表現を変更しましたが、このソリューションは、サブストリングの各重複部分の後の期間( "近傍。覚醒")。
誰かが正しい方向に向けることができますか?理想的には、この方法の入力は短い段落であり、単一行だけではありません。
正規表現を使用するか、効率的なソリューションに興味がありますか? – Matt
私は正規表現を実際に使う必要はありません。私は、正規表現が重複したフレーズを簡単に見つけ出し、重複する単語を見つけられないと思いました。他の解決策も歓迎されるでしょう! –