キーワードを含む行を含むファイルで作業しており、一部の行には重複したキーワードが含まれています。
例えば:
dangerous,dangerous,hazardous,perilous
行ごとに重複するすべてのWordを削除することをNotepad ++に伝えたいです。この例ではdangerous,
は削除されます:
dangerous,hazardous,perilous
そのような行がたくさんあるので、これを自動化する方法を探しています。
正規表現を使用して、行内の連続する重複した単語を削除できますが、連続していない重複した単語を削除することはできないと思います(例:_dangerous, hazardous, dangerous
_)。
この正規表現は、連続する重複する単語をすべて削除します-重複する単語が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
_などの形式は変更されません。正規表現はそれらに適用されません。
ここに仕事をする方法があります、これはそれらが隣接していない場合でもすべての重複する単語を置き換えます:
(?:^|\G)(\b\w+\b),?(?=.*\1)
LEAVE EMPTY
. matches newline
説明:
(?:^|\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