如何使用记事本++删除每一行上所有重复的单词?


11

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

例如:

dangerous,dangerous,hazardous,perilous

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

dangerous,hazardous,perilous

我有很多这样的话,这就是为什么我正在寻找一种自动化的方法。


1
dangerous,hazardous,dangerous,perilous呢 换句话说,重复的词是否总是彼此相邻?
丹尼尔·贝克

Answers:


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, anotherwordthree words expression, three words expression, anotherword


谢谢您的帮助!但是,我出现了0次,我按照您的建议尝试使用分隔的关键字进行此操作,但它没有用,我也尝试了以前的方法,但没有任何反应,请检查我的屏幕截图:goo.gl/eZ7Kp
Gabriel

这个正则表达式应该起作用:(\b\w+\b)\W+\1对于两个重复的单词。我将编辑答案。逗号就是为什么其他正则表达式不起作用的原因。
amiregelz

我尝试了所有可能的组合,没有逗号,只有空格,没有空格和逗号,但是什么也没有。请赐教,这是文本文件:goo.gl/sP20z
Gabriel

问题是,正则表达式我在答复中写道:仅适用于(我想)你要的格式:word, word, anotherword。但是,您有许多实例有些不同,例如came across, came across3个或4个单词。也有带有'like的单词,don't这会使Notepad ++ regex系统中的事情变得更加复杂。Notepad ++正则表达式系统非常烦人且受限制,因此解决方案是在python(或另一种语言)中使用正则表达式,或者为Notepad ++创建格式特定的正则表达式。
amiregelz

另一个问题是,大多数重复的单词也出现在上一行中,这使您难以实现目标。如果您想删除所有重复的单词,那不是那么困难。你可以这样做。我建议您在Notepad ++中使用特定的正则表达式(我可以为您提供帮助,请告诉我所有重复单词的格式),或者考虑采用其他解决方法。
amiregelz 2012年

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.