Bagaimana cara menghapus semua kata yang digandakan pada setiap baris menggunakan Notepad ++?

11

Saya sedang mengerjakan file yang berisi baris dengan kata kunci dan beberapa baris berisi kata kunci yang digandakan.

Sebagai contoh:

dangerous,dangerous,hazardous,perilous

Saya ingin memberi tahu Notepad ++ bahwa saya ingin menghapus setiap kata yang digandakan per baris. Untuk contoh ini dangerous,akan dihapus:

dangerous,hazardous,perilous

Saya memiliki banyak baris seperti itu dan itulah sebabnya saya mencari cara otomatis untuk melakukan ini.

Gabriel
sumber
1
Bagaimana dengan dangerous,hazardous,dangerous,perilous? Dengan kata lain, apakah kata yang digandakan selalu bersebelahan?
Daniel Beck

Jawaban:

11

Anda dapat menggunakan ekspresi reguler untuk menghapus kata yang digandakan berturut-turut dalam satu baris, namun saya rasa tidak mungkin untuk menghapus kata yang digandakan yang tidak berurutan (mis dangerous, hazardous, dangerous.).

Gunakan regex ini di jendela ganti di Notepad ++, dan jangan lupa untuk memilih "Ekspresi reguler" sebagai opsi Mode Pencarian di bawah:

Regex ini akan menghapus semua kata digandakan berturut-turut - apakah itu 2 kata digandakan atau 10 kata digandakan berturut-turut: \b(\w+)(?:,\s+\1\b)+ .

Regex no-koma yang sama persis adalah: \b(\w+)(?:\s+\1\b)+(mungkin berguna untuk pengguna lain).

Jika Anda ingin regex khusus untuk hanya dua kata digandakan (ganda), menggunakan regex ini: (\b\w+\b)\W+\1.

Tempatkan regex ini di Ganti dengan kotak untuk menjaga satu kejadian dari kata (kata kalau tidak semua diulang akan dihapus): ${1} .

Ekspresi reguler ini akan memperbaiki situasi seperti yang Anda gambarkan dalam pertanyaan Anda sebagai contoh. Regex pertama akan bekerja untuk setiap jumlah kata yang digandakan (misalnya dangerous, dangerous, dangerous, dangerous, hazardous), sedangkan versi kedua hanya akan berfungsi untuk dua kata yang digandakan (misalnya dangerous, dangerous, hazardous).

Catatan: Ekspresi reguler hanya akan berlaku untuk format yang dijelaskan dalam pertanyaan, yang berarti bahwa format suka two words, two words, anotherword, two-words, two-words, anotherword, three words expression, three words expression, anotherwordtidak akan berubah karena regex tidak akan berlaku untuk mereka.

amiregelz
sumber
Terima kasih untuk bantuannya! Namun saya mendapatkan 0 kejadian, saya mencoba melakukan ini dengan kata kunci terpisah seperti yang Anda sarankan dan tidak berhasil, saya juga mencoba seperti sebelumnya dan tidak ada, silakan periksa tangkapan layar saya: goo.gl/eZ7Kp
Gabriel
Regex ini harus berfungsi: (\b\w+\b)\W+\1untuk dua kata yang digandakan. Saya akan mengedit jawaban saya. Koma adalah alasan mengapa regex lainnya tidak berfungsi.
amiregelz
Saya mencoba setiap kombinasi yang mungkin, tidak ada koma, hanya spasi, tidak ada ruang dan koma, namun tidak ada apa-apa. Tolong beri tahu saya, ini file teksnya: goo.gl/sP20z
Gabriel
Masalahnya adalah bahwa ekspresi reguler yang saya tulis dalam jawaban saya hanya berlaku untuk format (saya pikir) Anda minta: word, word, anotherword. Namun, Anda memiliki banyak contoh yang sedikit berbeda, seperti came across, came acrossdan beberapa dengan 3 atau 4 kata. Juga ada kata-kata dengan 'suka don'tdan itu membuat hal-hal lebih rumit dalam sistem regex Notepad ++ . Sistem regex Notepad ++ cukup mengganggu dan terbatas juga, jadi solusinya adalah menggunakan regex dengan python (atau bahasa lain), atau membuat ekspresi reguler khusus format untuk Notepad ++.
amiregelz
Masalah lain adalah sebagian besar kata yang diduplikasi juga muncul di baris sebelumnya, yang membuatnya sulit untuk mencapai tujuan Anda. Jika Anda ingin menghapus semua kata yang digandakan, maka itu tidak terlalu sulit. Anda dapat melakukan sesuatu seperti ini & ini . Saya sarankan Anda menggunakan ekspresi reguler tertentu di Notepad ++ (saya dapat membantu Anda, cukup beri tahu saya semua format kata yang digandakan) atau pertimbangkan pendekatan berbeda untuk masalah Anda.
amiregelz
1

Ini adalah cara untuk melakukan pekerjaan itu, ini akan menggantikan semua kata duplikat bahkan jika mereka tidak bersebelahan:

  • Ctrl+H
  • Menemukan apa: (?:^|\G)(\b\w+\b),?(?=.*\1)
  • Ubah dengan: LEAVE EMPTY
  • periksa Bungkus
  • periksa persamaan reguler
  • JANGAN PERIKSA . matches newline
  • Replace all

Penjelasan:

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

Diberikan input seperti: dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous

Kita punya:

dangerous,hazardous,perilous
Toto
sumber