Я работаю над файлом, содержащим строки с ключевыми словами, а некоторые строки содержат дублированные ключевые слова.
Например:
dangerous,dangerous,hazardous,perilous
Я хочу сказать Notepad ++, что я хочу удалить каждое дублированное слово в строке. Для этого примера dangerous,
будут удалены:
dangerous,hazardous,perilous
У меня есть несколько таких строк, и поэтому я ищу автоматический способ сделать это.
notepad++
text-editors
duplicate
Габриель
источник
источник
dangerous,hazardous,dangerous,perilous
? Другими словами, дублированные слова всегда рядом друг с другом?Ответы:
Вы можете использовать регулярное выражение для удаления последовательных дублированных слов в строке, однако я не думаю, что возможно удалить дублированные слова, которые не являются последовательными (например
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
не будет изменено , поскольку регулярное выражение не будет применяться к ним.источник
(\b\w+\b)\W+\1
для двух дублированных слов. Я отредактирую свой ответ. Запятые - вот почему другое регулярное выражение не работает.word, word, anotherword
. Тем не менее, у вас есть много примеров, которые немного отличаются, например,came across, came across
с 3 или 4 словами. Также есть слова с'
лайком,don't
и это усложняет систему регулярных выражений Notepad ++ . Система регулярных выражений Notepad ++ довольно раздражающая и ограниченная, поэтому решение состоит в том, чтобы либо использовать регулярные выражения в python (или другом языке), либо создавать регулярные выражения для Notepad ++, зависящие от формата.Вот способ сделать эту работу, он заменит все повторяющиеся слова, даже если они не являются смежными:
(?:^|\G)(\b\w+\b),?(?=.*\1)
LEAVE EMPTY
. matches newline
Объяснение:
Учитывая вход как:
dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous
У нас есть:
источник