11

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

Например:

dangerous,dangerous,hazardous,perilous

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

dangerous,hazardous,perilous

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

2 ответа2

9

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

1

Вот способ выполнить эту работу, он заменит все повторяющиеся слова, даже если они не являются смежными:

  • Ctrl+H
  • Найти что: (?:^|\G)(\b\w+\b),?(?=.*\1)
  • Заменить на: LEAVE EMPTY
  • проверить обернуть
  • проверьте регулярное выражение
  • НЕ ПРОВЕРИТЬ . matches newline
  • Заменить все

Объяснение:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .