Як видалити всі дублювані слова у кожному рядку за допомогою Notepad ++?


11

Я працюю над файлом, що містить рядки з ключовими словами, а деякі рядки містять дублювані ключові слова.

Наприклад:

dangerous,dangerous,hazardous,perilous

Я хочу сказати Notepad ++, що я хочу видалити кожне дублюване слово в рядку. Для цього прикладу dangerous,буде видалено:

dangerous,hazardous,perilous

У мене є купа подібних рядків, і саме тому я шукаю автоматизований спосіб зробити це.


1
Про що dangerous,hazardous,dangerous,perilous? Іншими словами, чи дублюються слова завжди поруч?
Даніель Бек

Відповіді:


11

Ви можете використовувати звичайний вираз для видалення послідовних дублюваних слів у рядку, проте я не думаю, що можливо видалити дублювані слова, які не є послідовними (наприклад dangerous, hazardous, dangerous).

Використовуйте цей регулярний вираз у вікні заміни в Блокноті ++, і не забудьте вибрати "Регулярний вираз" як параметр Режим пошуку нижче:

Це регулярний вираз видаляє всі послідовні дубльовані слова - будь то 2 дубльованими словами або 10 дубльованих слів послідовно: \b(\w+)(?:,\s+\1\b)+ .

Точно такий же регулярний вираз без коми - це: \b(\w+)(?:\s+\1\b)+(може бути корисним для інших користувачів).

Якщо ви хочете , регулярний вираз , в зокрема тільки два дубльованих слова (двійники), використовуйте це регулярний вираз: (\b\w+\b)\W+\1.

Помістіть це регулярний вираз в Замінити коробку , щоб зберегти одне входження слова ( в іншому випадку все повторювані слова будуть видалені): ${1} .

Ці регулярні вирази виправлять ситуацію, схожу на ту, яку ви описали у своєму запитанні як приклад. Перший регулярний вираз буде працювати для кожної кількості дублюваних слів (наприклад dangerous, dangerous, dangerous, dangerous, hazardous), а другий варіант працюватиме лише для двох дублюваних слів (наприклад dangerous, dangerous, hazardous).

Примітка: Регулярний вираз застосовуватиметься лише до формату, описаного у запитанні, тобто такі формати, як two words, two words, anotherword, наприклад two-words, two-words, anotherword, three words expression, three words expression, anotherwordне будуть змінені, оскільки регулярний вираз не застосовуватиметься до них.


Дякую за допомогу! Однак я отримую 0 випадків, я намагався робити це з окремими ключовими словами, як ви запропонували, і це не спрацювало, я також спробував, як вони були раніше, і нічого, будь ласка, перевірте захоплення екрана: goo.gl/eZ7Kp
Габріель,

Цей регулярний вираз повинен працювати: (\b\w+\b)\W+\1для двох дублюваних слів. Я відредагую свою відповідь. Коми, чому інший регулярний вираз не працює.
amiregelz

Я пробував всі можливі комбінації, без коми, лише пробіли, пробіл і кома, і все ж нічого. Будь ласка, порадуйте мене, ось текстовий файл: goo.gl/sP20z
Габріель

Проблема полягає в тому, що регулярний вираз , яке я написав у своїй відповіді відноситься тільки до формату (я думав) ви просили: word, word, anotherword. Однак у вас є багато примірників, які трохи відрізняються, як, наприклад, came across, came acrossдеякі з 3 або 4 слова. Також є слова з 'подібними, don'tі це ускладнює справи в системі регулярних виразів Notepad ++ . Система регулярних виразів Notepad ++ також досить дратівлива і обмежена, тому рішенням є або використовувати регулярний вираз в python (або іншій мові), або вносити регулярні вирази для Notepad ++, характерні для формату.
amiregelz

Інша проблема полягає в тому, що більшість слів, що дублюються, також з’являються в попередньому рядку, що ускладнює досягнення вашої мети. Якщо ви хочете видалити всі дублювані слова, то це було не так складно. Ви могли б зробити що - щось на зразок цього і це . Я пропоную використовувати конкретні регулярні вирази в Блокноті ++ (я можу вам допомогти, просто скажіть мені всі формати дублюваних слів) або розглянути інший підхід до вашої проблеми.
amiregelz

1

Ось спосіб виконати цю роботу, це замінить усі повторювані слова, навіть якщо вони не є суміжними:

  • Ctrl+H
  • Знайти що: (?:^|\G)(\b\w+\b),?(?=.*\1)
  • Замінити: LEAVE EMPTY
  • перевірити Загорнути
  • перевірити Регулярне вираження
  • НЕ ПЕРЕВІРИТЕ . matches newline
  • Replace all

Пояснення:

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

Враховуючи такі дані: dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous

Ми отримали:

dangerous,hazardous,perilous
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.