Wie entferne ich alle doppelten Wörter in jeder Zeile mit Notepad ++?

11

Ich arbeite an einer Datei, die Zeilen mit Schlüsselwörtern enthält, und einige Zeilen enthalten doppelte Schlüsselwörter.

Beispielsweise:

dangerous,dangerous,hazardous,perilous

Ich möchte Notepad ++ mitteilen, dass ich jedes doppelte Wort pro Zeile entfernen möchte. Für dieses Beispiel dangerous,würde entfernt:

dangerous,hazardous,perilous

Ich habe eine Reihe solcher Zeilen und deshalb suche ich nach einer automatisierten Möglichkeit, dies zu tun.

Gabriel
quelle
1
Was ist mit dangerous,hazardous,dangerous,perilous? Mit anderen Worten, sind doppelte Wörter immer nebeneinander?
Daniel Beck

Antworten:

11

Sie können einen regulären Ausdruck verwenden, um aufeinanderfolgende doppelte Wörter in einer Zeile zu entfernen. Ich glaube jedoch nicht, dass es möglich ist, doppelte Wörter zu entfernen, die nicht aufeinanderfolgend sind (z dangerous, hazardous, dangerous. B. ).

Verwenden Sie diesen regulären Ausdruck im Ersetzungsfenster in Notepad ++ und vergessen Sie nicht, "Regulärer Ausdruck" als Suchmodusoption unten auszuwählen:

Dieser reguläre Ausdruck entfernt alle aufeinanderfolgenden doppelten Wörter - unabhängig davon, ob es sich um 2 doppelte Wörter oder 10 aufeinanderfolgende doppelte Wörter handelt : \b(\w+)(?:,\s+\1\b)+ .

Der exakt gleiche reguläre Ausdruck ohne Kommas wäre: \b(\w+)(?:\s+\1\b)+(könnte für andere Benutzer nützlich sein).

Wenn Sie eine Regex speziell für nur zwei doppelte Wörter (Doppelwörter) wünschen, verwenden Sie diese Regex : (\b\w+\b)\W+\1.

Fügen Sie diesen regulären Ausdruck in das Feld Ersetzen durch ein , um ein Vorkommen des Wortes beizubehalten (andernfalls werden alle wiederholten Wörter entfernt) : ${1} .

Diese regulären Ausdrücke beheben eine Situation wie die, die Sie in Ihrer Frage als Beispiel beschrieben haben. Der erste reguläre Ausdruck funktioniert für jede Anzahl doppelter Wörter (z. B. dangerous, dangerous, dangerous, dangerous, hazardous), während die zweite Version nur für zwei doppelte Wörter (z dangerous, dangerous, hazardous. B. ) funktioniert .

Hinweis: Der reguläre Ausdruck wird nur auf das Format gelten in der Frage beschrieben, was bedeutet , dass Formate wie two words, two words, anotherword, two-words, two-words, anotherword, three words expression, three words expression, anotherwordnicht geändert werden , da die Regex nicht für sie gelten.

amiregelz
quelle
Danke für die Hilfe! Ich erhalte jedoch 0 Vorkommen. Ich habe versucht, dies mit getrennten Schlüsselwörtern zu tun, wie Sie vorgeschlagen haben, und es hat nicht funktioniert. Ich habe auch versucht, wie zuvor, und nichts. Bitte überprüfen Sie meine Bildschirmaufnahme: goo.gl/eZ7Kp
Gabriel
Diese Regex sollte funktionieren: (\b\w+\b)\W+\1für zwei doppelte Wörter. Ich werde meine Antwort bearbeiten. Die Kommas sind der Grund, warum der andere reguläre Ausdruck nicht funktioniert.
Amiregelz
Ich habe jede mögliche Kombination ausprobiert, keine Kommas, nur Leerzeichen, kein Leerzeichen und Komma und doch nichts. Bitte erleuchten Sie mich, hier ist die Textdatei: goo.gl/sP20z
Gabriel
Das Problem ist, dass der reguläre Ausdruck, den ich in meiner Antwort geschrieben habe, nur für das Format gilt (ich dachte), nach dem Sie gefragt haben : word, word, anotherword. Sie haben jedoch viele Instanzen, die ein bisschen anders sind, wie came across, came acrossund einige mit 3 oder 4 Wörtern. Auch gibt es Wörter mit 'wie don'tund es macht die Sache kompliziert im Notepad ++ regex System . Das Regex-System von Notepad ++ ist ziemlich nervig und ebenfalls eingeschränkt. Daher besteht die Lösung darin, entweder Regex in Python (oder einer anderen Sprache) zu verwenden oder formatspezifische reguläre Ausdrücke für Notepad ++ zu erstellen.
Amiregelz
Ein weiteres Problem ist, dass die meisten Wörter, die dupliziert werden, auch in der vorherigen Zeile erscheinen, was es schwierig macht, Ihr Ziel zu erreichen. Wenn Sie alle doppelten Wörter entfernen möchten, war das nicht so schwierig. Man könnte so etwas wie tut dies und dies . Ich schlage vor, dass Sie in Notepad ++ bestimmte reguläre Ausdrücke verwenden (ich kann Ihnen helfen, sagen Sie mir einfach alle Formate der duplizierten Wörter) oder einen anderen Ansatz für Ihr Problem in Betracht ziehen.
Amiregelz
1

Hier ist eine Möglichkeit, die Arbeit zu erledigen. Dadurch werden alle doppelten Wörter ersetzt, auch wenn sie nicht zusammenhängend sind:

  • Ctrl+H
  • Finde was: (?:^|\G)(\b\w+\b),?(?=.*\1)
  • Ersetzen mit: LEAVE EMPTY
  • Überprüfen Sie Wrap around
  • Überprüfen Sie den regulären Ausdruck
  • NICHT PRÜFEN . matches newline
  • Replace all

Erläuterung:

(?:^|\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

Gegeben eine Eingabe wie: dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous

Wir haben:

dangerous,hazardous,perilous
Toto
quelle