我正在处理一个包含关键字行的文件,其中有些行包含重复的关键字。
例如:
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