Answers:
您可以使用正则表达式删除一行中连续的重复单词,但是我认为无法删除不连续的重复单词(例如dangerous, hazardous, dangerous
)。
此正则表达式将删除所有连续的重复单词-不管是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个单词。也有带有'
like的单词,don't
这会使Notepad ++ regex系统中的事情变得更加复杂。Notepad ++正则表达式系统非常烦人且受限制,因此解决方案是在python(或另一种语言)中使用正则表达式,或者为Notepad ++创建格式特定的正则表达式。
这是一种完成工作的方法,即使所有重复的单词不是连续的,它也将替换所有重复的单词:
(?:^|\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
dangerous,hazardous,dangerous,perilous
呢 换句话说,重复的词是否总是彼此相邻?