2016-05-26 4 views
1

In Editor ++ Ich möchte auf folgende Weise zu finden und zu ersetzen.Reguläre Ausdrücke in Notepad ++ Entfernen Sie doppelte Buchstaben aus einem Wort

Lassen Sie, wenn ein Wort 'Buch' ist Hier ist zwei 'o' in diesem Wort. Ich möchte ein 'o' wird

Nach der Verarbeitung des Wortes entfernen sein 'Bok'

Hier einige Beispiele

UFU> UF

sans> san

Noob> nob

Uhr> clok

AABBCC> ABC

Oder ich kann doppelte Wort ein Buchstabe nach dem anderen entfernen. Lassen Sie zuerst entfernen Sie alle doppelten 'a' dann duplizieren 'b' dann ... bis 'z'

wie-

ABCDEEABCDDABB> ABCDEEBCDDBB> ABCDEECDD> ABCDEEDD> ABCDEE> ABCDE

Antidisestablishmentarianism> Antidisestblishmentrinism > Antidstestblshmntrnsm> Antidestblshmntrnsm> Antidsestblshmtrs> Antidsetblhmtr> Antidseblhmr

+0

Was ist Ausgabe für Banane? – rock321987

+0

Banane wird verboten werden. Ansonsten kann ich ein Duplikat Wort für Wort entfernen.Wie zuerst entfernen Sie alle Duplikate 'a', dann duplizieren 'b' die ... –

+0

und für Cantaloupe !? – sweaver2112

Antwort

0

Dies funktioniert (\S*)([a-z])(\S*)(\2)(\S*)
Ersetzt durch \1\2\3\5
Sie müssen durchlaufen, bis alle Wiederholungen verbraucht werden.

Erklärung:
Es gibt fünf einfangenden Gruppen, die jeweils auf jeder Klammer Paar. Drei von ihnen sind (\S*), was "keine Leerzeichen" bedeutet, um die Wortgrenzen auszudrücken. entspricht einem Zeichen, und (\2) entspricht demselben Zeichen. Diese einfangende Gruppe (\2) ist die vierte und ist die einzige, die außerhalb des Rekonstruktionsausdruckes liegt, wobei der duplizierte Zeichenwert weggelassen wird.

+0

Arbeiten Sie reibungslos. Vielen Dank. Ich verstehe die Regex zu finden, aber ich verstehe nicht ersetzen regex –

+0

Die ersetzen Text ist keine Regex, es ist nur "ein Ausdruck", wo maskiert Zahlen beziehen sich auf das Erfassen von Gruppen und Literalen vorhanden sein können. (In diesem Fall gibt es keine). Kein Symbol hat hier eine besondere Bedeutung außer dem umgekehrten Schrägstrich –

0

Wenn Sie alles in einem Durchgang tun wollen, gibt es keinen Weg, nicht mit Regex allein. Sie können jedoch in mehreren Durchgängen tun mit nur einem regex:

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

mit $1 ersetzen und dabei halten, bis der Text ändert stoppt.

Dies findet das erste Zeichen, das ein oder mehrere Duplikate enthält, und erfasst es und alle folgenden Zeichen kurz vor dem Duplikat in Gruppe # 1. Das Ersetzen der gesamten Übereinstimmung mit nur Gruppe # 1 löscht effektiv das doppelte Zeichen (oder Zeichen, wenn \2+ mehr als eins verbraucht).

Wenn Sie auf Text arbeiten, die mehr als ein Wort enthält, und wollen, dass sie alle ändern, können Sie \S oder \w statt ., verwenden Sie Leerzeichen zu ignorieren und/oder Zeichensetzung.