2017-01-23 9 views
-2

文字列から重複した単語を削除する問題に取り組んでいます。例えば、重複した単語を削除するJavaの正規表現

入力:Goodbye bye bye world world world

出力:私はオンラインリソースから作業パターンを持っているが、私はその中のすべての内容を理解することはできませんよGoodbye bye world

(\\b\\W+\\b\\1\\b)*

  1. 初期\\b
  2. (\\w+)マッチ1文字以上、この表現で
  3. ワードbounariesを一致させることである。

    String pattern = "\\b(\\w+)(\\b\\W+\\b\\1\\b)*"; 
    

    は、ここに私の理解です。 \\bはワード境界に一致します

    b。 \\W+は、1つ以上の非単語文字と一致します。

    c。 \\bは再び単語バウラーに一致します

    d。 \\1 ???私はこれが何であるか知りませんが、これがなければ動作しません。

    c。あなたが見ることができるように\\bは再び言葉bounary

のために一致して、私の主な混乱は、アイテム3、特に\\1についてです。 誰でももっと詳しく説明できますか?

+0

こんにちは。私はいつもregexrを使って正規表現を試して試しています(ここをクリックしてください)(http://regexr.com/)、メッセージを表示する式の上にポインタを置いて、何が起こっているのかを説明してください。 –

+0

@GabrielMarques、 。しかし、このウェブエディタでは、私のパターンも、anubhavaによって書かれたパターンも動作しません。構文はjava regexと同じですか? – drdot

+0

はい、二重バックスラッシュ文字 '\'を削除しようとするとうまくいきます。二重バックスラッシュを使用すると、式を文字列に書くことができます。 –

答えて

2

あなたが先に後方参照を使用して同じマッチした単語を持っているすべての単語を削除するために先読みを使用することができますJavaの使用:部分的な言葉にマッチするのを避けるためにここに単語の境界を使用することが重要である

final String regex = "\\b(\\w+)\\b\\s*(?=.*\\b\\1\\b)"; 
final String input = "Goodbye bye bye world world world\n"; 

final String result = input.replaceAll(regex, ""); 

RegEx Demo

関連する問題