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.
notepad++
text-editors
duplicate
Gabriel
quelle
quelle
dangerous,hazardous,dangerous,perilous
? Mit anderen Worten, sind doppelte Wörter immer nebeneinander?Antworten:
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 (zdangerous, 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, anotherword
nicht geändert werden , da die Regex nicht für sie gelten.quelle
(\b\w+\b)\W+\1
für zwei doppelte Wörter. Ich werde meine Antwort bearbeiten. Die Kommas sind der Grund, warum der andere reguläre Ausdruck nicht funktioniert.word, word, anotherword
. Sie haben jedoch viele Instanzen, die ein bisschen anders sind, wiecame across, came across
und einige mit 3 oder 4 Wörtern. Auch gibt es Wörter mit'
wiedon't
und 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.Hier ist eine Möglichkeit, die Arbeit zu erledigen. Dadurch werden alle doppelten Wörter ersetzt, auch wenn sie nicht zusammenhängend sind:
(?:^|\G)(\b\w+\b),?(?=.*\1)
LEAVE EMPTY
. matches newline
Erläuterung:
Gegeben eine Eingabe wie:
dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous
Wir haben:
quelle