Pracuję nad plikiem zawierającym wiersze ze słowami kluczowymi, a niektóre wiersze zawierają zduplikowane słowa kluczowe.
Na przykład:
dangerous,dangerous,hazardous,perilous
Chcę powiedzieć Notepad ++, że chcę usunąć każde zduplikowane słowo z wiersza. W tym przykładzie dangerous,
zostałby usunięty:
dangerous,hazardous,perilous
Mam kilka takich linii i dlatego szukam zautomatyzowanego sposobu na zrobienie tego.
notepad++
text-editors
duplicate
Gabriel
źródło
źródło
dangerous,hazardous,dangerous,perilous
? Innymi słowy, czy zduplikowane słowa są zawsze obok siebie?Odpowiedzi:
Możesz użyć wyrażenia regularnego, aby usunąć kolejne zduplikowane słowa w linii, jednak nie sądzę, że jest możliwe usunięcie zduplikowanych słów, które nie są kolejne (np
dangerous, hazardous, dangerous
.).Użyj tego wyrażenia regularnego w oknie zastępowania w Notepad ++ i nie zapomnij wybrać „Wyrażenie regularne” jako opcji Tryb wyszukiwania poniżej:
Ten regex usunie wszystkie kolejne słowa duplikatów - czy to 2 zduplikowane słowa lub 10 zduplikowane słowa kolejno:
\b(\w+)(?:,\s+\1\b)+
.Dokładnie to samo wyrażenie regularne bez przecinków:
\b(\w+)(?:\s+\1\b)+
(może być przydatne dla innych użytkowników).Jeśli chcesz regex specjalnie dla zaledwie dwóch zduplikowane słowa (podwójna), należy użyć tego wyrażenia regularnego:
(\b\w+\b)\W+\1
.Umieść ten regex w Wymienić z pudełka, aby zachować jedno wystąpienie słowa (w przeciwnym razie wszystkie powtarzające się słowa będą usuwane)
${1}
.Te wyrażenia regularne naprawią sytuację taką jak opisana w pytaniu jako przykład. Pierwsze wyrażenie regularne będzie działać dla każdej liczby zduplikowanych słów (np.
dangerous, dangerous, dangerous, dangerous, hazardous
), Podczas gdy druga wersja będzie działać tylko dla dwóch zduplikowanych słów (npdangerous, dangerous, hazardous
.).Uwaga: Wyrażenie regularne będą miały zastosowanie tylko do formatu opisanego w pytaniu, co oznacza, że formaty podoba
two words, two words, anotherword
,two-words, two-words, anotherword
,three words expression, three words expression, anotherword
nie ulegnie zmianie, ponieważ regex nie będzie stosować się do nich.źródło
(\b\w+\b)\W+\1
dla dwóch zduplikowanych słów. Zmienię swoją odpowiedź. Przecinki powodują, że inne wyrażenia regularne nie działają.word, word, anotherword
. Jednak masz wiele instancji, które są nieco inne, na przykładcame across, came across
niektóre z 3 lub 4 słowami. Są też słowa z'
podobnymidon't
i to komplikuje sprawę w systemie wyrażeń regularnych Notepad ++ . System wyrażeń regularnych Notepad ++ jest również dość irytujący i ograniczony, więc rozwiązaniem może być użycie wyrażenia regularnego w pythonie (lub innym języku) lub tworzenie wyrażeń regularnych specyficznych dla formatu dla Notepad ++.Oto sposób na wykonanie zadania, to zastąpi wszystkie zduplikowane słowa, nawet jeśli nie są ciągłe:
(?:^|\G)(\b\w+\b),?(?=.*\1)
LEAVE EMPTY
. matches newline
Wyjaśnienie:
Biorąc pod uwagę dane wejściowe takie jak:
dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous
Mamy:
źródło