Notepad ++ kullanarak her satırdaki tüm yinelenen kelimeleri nasıl kaldırırım?


11

Anahtar kelimeler içeren satırlar içeren bir dosya üzerinde çalışıyorum ve bazı satırlar yinelenen anahtar kelimeler içeriyor.

Örneğin:

dangerous,dangerous,hazardous,perilous

Notepad ++ 'a her satırda yinelenen her sözcüğü kaldırmak istediğimi söylemek istiyorum. Bu örnek dangerous,için kaldırılacak:

dangerous,hazardous,perilous

Bunun gibi bir grup satırım var ve bu yüzden bunu yapmanın otomatik bir yolunu arıyorum.


1
Ne olmuş dangerous,hazardous,dangerous,perilous? Başka bir deyişle, yinelenen kelimeler her zaman yan yana mıdır?
Daniel Beck

Yanıtlar:


11

Bir satırdaki art arda yinelenen sözcükleri kaldırmak için normal bir ifade kullanabilirsiniz, ancak ardışık olmayan (örneğin dangerous, hazardous, dangerous) yinelenen sözcükleri kaldırmanın mümkün olduğunu düşünmüyorum .

Bu normal ifadeyi Notepad ++ içindeki değiştirme penceresinde kullanın ve aşağıdaki Arama Modu seçeneği olarak "Normal ifade" yi seçmeyi unutmayın:

Bu regex tüm ardışık yinelenen kelimeleri kaldırır - bu arka arkaya 2 yinelenen kelime veya 10 çoğaltılamaz kelimeleri olsun: \b(\w+)(?:,\s+\1\b)+ .

Aynı virgül içermeyen normal ifade şu şekildedir: \b(\w+)(?:\s+\1\b)+(diğer kullanıcılar için yararlı olabilir).

Özellikle sadece iki çoğaltılamaz kelimeler (çift) için bir regex istiyorsanız, bu normal ifadeler kullanabilirsiniz: (\b\w+\b)\W+\1.

Bu regex yerleştirin değiştirin kelimenin kez kullanıldığını tutmak için kutunun (aksi takdirde tüm tekrarlanan kelimeler silinecektir): ${1} .

Bu düzenli ifadeler, sorunuzda açıkladığınız gibi bir durumu örnek olarak düzeltir. İlk regex her sayıda yinelenen kelime (ör. dangerous, dangerous, dangerous, dangerous, hazardous) İçin kullanılırken, ikinci sürüm yalnızca iki yinelenen kelime (ör. dangerous, dangerous, hazardous) İçin çalışır.

Not: Normal ifade sadece biçimleri gibi, yani söz konusu açıklanan formatta uygulanır two words, two words, anotherword, two-words, two-words, anotherword, three words expression, three words expression, anotherwordregex onlar için geçerli değildir çünkü değişmeyecektir.


Yardım için teşekkürler! Ancak 0 tekrar alıyorum, bunu önerdiğiniz gibi ayrılmış anahtar kelimelerle yapmayı denedim ve işe yaramadı, daha önce olduğu gibi denedim ve hiçbir şey, lütfen ekran görüntümü
Gabriel

Bu normal ifade çalışmalıdır: (\b\w+\b)\W+\1iki yinelenen kelime için. Cevabımı düzenleyeceğim. Virgüller, diğer normal ifadenin neden çalışmadığından kaynaklanır.
amiregelz

Mümkün olan her kombinasyonu denedim, virgül yok, sadece boşluklar, boşluk ve virgül yok, ama hiçbir şey yok. Lütfen beni aydınlatın
Gabriel

Sorun şu ki, cevabımda yazdığım düzenli ifade sadece istediğin format için geçerli word, word, anotherword. Bununla birlikte, biraz farklı, örneğin came across, came across3 veya 4 kelimeli birçok örneğiniz var . Ayrıca orada olan kelimelerdir 'gibi don'tve daha karmaşık şeyler yapar Notepad ++ regex sistemine . Notepad ++ regex sistemi de oldukça can sıkıcı ve sınırlıdır, bu nedenle çözüm python'da (veya başka bir dilde) regex kullanmak veya Notepad ++ için formata özgü düzenli ifadeler yapmaktır.
amiregelz

Başka bir sorun, çoğaltılan kelimelerin çoğunun önceki satırda da görünmesi, hedefinize ulaşmanızı zorlaştırmasıdır. Yinelenen tüm kelimeleri kaldırmak isterseniz , o kadar da zor olmadı. Sen böyle bir şey yapabileceğini bu & bu . Notepad ++ 'da belirli düzenli ifadeler kullanmanızı öneririm (size yardımcı olabilirim, sadece yinelenen kelimelerin tüm formatlarını söyleyin) veya sorununuza farklı bir yaklaşım düşünün.
amiregelz

1

İşte işi yapmanın bir yolu, bitişik olmasalar bile tüm yinelenen kelimelerin yerini alacak:

  • Ctrl+H
  • Ne buldun: (?:^|\G)(\b\w+\b),?(?=.*\1)
  • Şununla değiştir: LEAVE EMPTY
  • Kontrol Et
  • düzenli ifadeyi kontrol et
  • KONTROL ETME . matches newline
  • Replace all

Açıklama:

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

Aşağıdaki gibi bir girdi verildi: dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous

Aldık:

dangerous,hazardous,perilous
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.