Как удалить все дублированные слова в каждой строке, используя Notepad ++?

11

Я работаю над файлом, содержащим строки с ключевыми словами, а некоторые строки содержат дублированные ключевые слова.

Например:

dangerous,dangerous,hazardous,perilous

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

dangerous,hazardous,perilous

У меня есть несколько таких строк, и поэтому я ищу автоматический способ сделать это.

Габриель
источник
1
Как насчет dangerous,hazardous,dangerous,perilous? Другими словами, дублированные слова всегда рядом друг с другом?
Даниэль Бек

Ответы:

11

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

Используйте это регулярное выражение в окне замены в Notepad ++, и не забудьте выбрать «Регулярное выражение» в качестве опции режима поиска ниже:

Это регулярное выражение удаляет все последовательные дублированные слова - будь то 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не будет изменено , поскольку регулярное выражение не будет применяться к ним.

amiregelz
источник
Спасибо за помощь! Однако я получаю 0 вхождений, я попытался сделать это с разделенными ключевыми словами, как вы предложили, и это не сработало, я также попробовал, как они были раньше, и ничего, пожалуйста, проверьте мой снимок
Габриэль
Это регулярное выражение должно работать: (\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
Другая проблема заключается в том, что большинство дублирующихся слов также появляются в предыдущей строке, что затрудняет достижение вашей цели. Если вы хотите удалить все дублированные слова, то это не так сложно. Вы могли бы сделать что-то вроде этого и этого . Я предлагаю вам использовать определенные регулярные выражения в Notepad ++ (я могу помочь вам, просто скажите мне все форматы дублированных слов) или рассмотреть другой подход к вашей проблеме.
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
Toto
источник