web-dev-qa-db-ja.com

Notepad ++を使用してすべての行の重複する単語をすべて削除する方法は?

キーワードを含む行を含むファイルで作業しており、一部の行には重複したキーワードが含まれています。

例えば:

dangerous,dangerous,hazardous,perilous

行ごとに重複するすべてのWordを削除することをNotepad ++に伝えたいです。この例ではdangerous,は削除されます:

dangerous,hazardous,perilous

そのような行がたくさんあるので、これを自動化する方法を探しています。

11
Gabriel

正規表現を使用して、行内の連続する重複した単語を削除できますが、連続していない重複した単語を削除することはできないと思います(例:_dangerous, hazardous, dangerous_)。

この正規表現をNotepad ++の置換ウィンドウで使用し、以下の検索モードオプションとして「正規表現」を選択することを忘れないでください。

この正規表現は、連続する重複する単語をすべて削除します-重複する単語が2つであるか、連続する重複する単語が10であるかに関係なく:\b(\w+)(?:,\s+\1\b)+

まったく同じノーカンマ正規表現は次のようになります:\b(\w+)(?:\s+\1\b)+(他のユーザーに役立つ場合があります)。

重複する2つの単語(ダブル)のみに特化した正規表現が必要な場合は、次の正規表現を使用します:_(\b\w+\b)\W+\1_。

この正規表現をReplace withボックスに配置して、Wordの1回の出現を保持します(そうしないと、繰り返されるすべての単語が削除されます): _${1}_。

これらの正規表現は、例として質問で説明したような状況を修正します。最初の正規表現は重複するすべての単語(たとえば_dangerous, dangerous, dangerous, dangerous, hazardous_)に対して機能しますが、2番目の正規表現は2つの重複する単語(たとえば_dangerous, dangerous, hazardous_)に対してのみ機能します。

注:正規表現は質問で説明されている形式にのみ適用されます。つまり、_two words, two words, anotherword_、_two-words, two-words, anotherword_、_three words expression, three words expression, anotherword_などの形式は変更されません。正規表現はそれらに適用されません。

11
amiregelz

ここに仕事をする方法があります、これはそれらが隣接していない場合でもすべての重複する単語を置き換えます:

  • Ctrl+H
  • 何を見つける:(?:^|\G)(\b\w+\b),?(?=.*\1)
  • と置換する: LEAVE EMPTY
  • チェックラップアラウンド
  • check Regular expression
  • チェックしないでください. matches newline
  • Replace all

説明:

(?:^|\G)    : non capture group, beginning of line or position of last match
(\b\w+\b)   : group 1, 1 or more Word character (ie. [a-zA-Z0-9_]), surrounded by Word boundaries
,?          : optional comma
(?=.*\1)    : positive lookahead, check if thhere is the same Word (contained in group 1) somewhere after

次のような入力があるとします:dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous

私たちは得ました:

dangerous,hazardous,perilous
1
Toto