如何使用 Notepad++ 删除每一行的所有重复的单词?

如何使用 Notepad++ 删除每一行的所有重复的单词?

我正在处理一个包含关键字行的文件,其中有些行包含重复的关键字。

例如:

dangerous,dangerous,hazardous,perilous

我想告诉 Notepad++,我想删除每行的每个重复单词。对于此示例,dangerous,将删除:

dangerous,hazardous,perilous

我有很多这样的线条,这就是为什么我正在寻找一种自动化的方式来完成这件事。

答案1

您可以使用正则表达式删除一行中连续重复的单词,但是我认为无法删除不连续的重复单词(例如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,因为正则表达式不适用于它们。

答案2

这是一种完成这项工作的方法,它将替换所有重复的单词,即使它们不连续:

  • 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

答案3

尝试这个:

  • Ctrl+H
  • 找什么:\b(\w+)\s+\1\b
  • 用。。。来代替:LEAVE EMPTY
  • 检查环绕
  • 检查正则表达式
  • 请勿检查. matches newline
  • Replace all

相关内容