Notepad ++中的正则表达式从单词中删除重复的字母

时间:2016-05-26 03:03:30

标签: regex notepad++ pcre

在Notepad ++中,我想以下列方式查找和替换。

如果一个词是' Book' 这是两个' o'在这个词中。我想删除一个' o'

处理完毕后,这将是' Bok'

以下是一些例子

UFU> UF

sans> SAN

noob>打头

时钟> clok

AABBCC> ABC

或者我可以逐个删除重复的单词。首先删除所有重复的' a'然后复制' b'然后......直到' z'

像 -

ABCDEEABCDDABB> ABCDEEBCDDBB> ABCDEECDD> ABCDEEDD> ABCDEE> ABCDE

Antidisestablishmentarianism> Antidseblhmr

2 个答案:

答案 0 :(得分:0)

如果你想在一次通过中完成所有操作,那就没有办法了,不能单独使用正则表达式。但是,您可以使用一个正则表达式在多个过程中执行此操作:

((.)(?:(?!\2).)*)\2+

替换为$1并继续这样做,直到文本停止更改。

这将查找具有一个或多个重复项的第一个字符,并捕获它以及任何后续字符,而不是组#1中的副本。仅使用#1组替换整个匹配会有效删除重复的字符(如果\2+消耗多个字符,则删除字符)。

如果您正在处理包含多个字词的文字,并希望对其进行全部更改,则可以使用\S\w代替.来忽略空格和/或标点符号。

答案 1 :(得分:0)

这有效(\S*)([a-z])(\S*)(\2)(\S*)
替换为\1\2\3\5
您需要迭代直到消耗掉所有重复。

<强>解释
每个括号对有五个捕获组。其中三个是(\S*),这意味着&#34;没有空格&#34;保持对单词边界的表达。 ([a-z])匹配一个char,(\2)匹配同一个char。此捕获组(\2)是第4个,并且是重建表达式之外的唯一,保留重复的char。