2016-05-25 2 views
2

ich eine Eingabe bekam die wie folgt aussieht:Regex - Suche nach zwei aufeinanderfolgenden Linien unterscheiden sich nur im Falle

Ababa
ababa
BEBEBE
cacaca
Dododo
dododo

Wie finde ich die aufeinander folgenden (nur zwei aufeinanderfolgende) Zeilen, die im Grunde die gleichen sind, unterscheiden sich aber nur im Fall (des ersten Zeichens). Für dieses Beispiel [Aa] Baba & [Dd] ododo.

Ich denke, es von der Art der Editor abhängen könnte ich verwenden und welche Art von Regex es funktioniert mit (habe ich versucht, mit Sublime Text beginnen, case-sensitive natürlich):

^([A-Z])([a-z]+)\n\l\1\2

\l\1 Werke zum Ersetzen von Gruppe 1 durch ein Anfangszeichen in Kleinbuchstaben (zumindest in Sublime Text), aber offensichtlich nicht dasselbe bei der Suche nach einem solchen Muster.

Irgendwelche Vorschläge?

Danke!

+0

Funktioniert nicht '^ ([A-Z]) ([a-z] +) \ n \ 1 \ 2'? Entfernen Sie einfach '\ l' und verwenden Sie die Groß-/Kleinschreibung nicht. –

+0

Nein, da die erste Gruppe bei der Erfassung in Großbuchstaben und nach der neuen Zeile in Kleinbuchstaben dargestellt wird. Es muss zwischen Groß- und Kleinschreibung unterschieden werden. – entenbein

+0

In Sublime Text, stellen Sie sicher, dass "Aa" -Knopf ist nicht überprüft und versuchen Sie es erneut (deaktivieren Sie die Groß-/Kleinschreibung). –

Antwort

8

Es scheint, dass Sie für ein Inline-überall-inside-Muster Groß- und Kleinschreibung Modifikator (?i:....) um die erste Rückreferenzierung suchen:

^([A-Z])([a-z]+)\n(?i:\1)\2$ 
        ^^^ ^

Dies wird die erste Rückreferenzierung Fall unempfindlich machen.

jeden Zeilenumbruch Stil zu unterstützen, verwendet \R statt \n:

^([A-Z])([a-z]+)\R(?i:\1)\2$ 
       ^^ 

Boost-Modifiers reference:

(?imsx-imsx ...) Abspaltungen, die der Perl-Modifikatoren in der Tat innerhalb des Musters sind, nehmen Sie Änderungen ab der Punkt, an dem der Block zuerst gesehen wird und sich bis zu einem beliebigen Einschließen erstreckt). Buchstaben vor einer - schalten Sie diesen Perl-Modifikator ein, Briefe danach, schalten Sie es aus.

(? Imsx-imsx: pattern) wendet die angegebenen Modifikatoren nur auf Muster an.

enter image description here

Muster Details:

  • ^ - Anfang einer Zeile (in Sublime Text und Notepad ++, der MUTLILINE-Modus ist standardmäßig aktiviert)
  • ([A-Z]) - (Gruppe 1) erster ASCII-Großbuchstabe (ersetzen Sie [A-Z] durch \p{Lu}, um mit jedem Unicode-Großbuchstaben übereinzustimmen)
  • ([a-z]+) - (Gruppe 2) 1 oder mehr Klein ASCII Buchstaben (ersetzen [a-z] mit \p{Ll} keine Unicode Kleinbuchstaben entsprechen)
  • \R - jede Zeilenumbruch (CRLF, LF oder CR)
  • (?i:\1) - a case-insensitive Rückreferenzierung zu Gruppe 1 Wert
  • \2 - Groß- und Kleinschreibung zu Rückreferenzierung Gruppe 2 Wert
  • $ - Ende einer Zeile/Datei.
+0

Oh, vergesst eine Flagge dort zu setzen. Das funktioniert! Danke vielmals! – entenbein

+1

Der MULTILINE-Modus ist in SublimeText und Notepad ++ standardmäßig aktiviert. '^' entspricht dem Zeilenanfang und '$' entspricht dem Zeilenende. Sonst brauchen Sie '\ A' und' \ z' Anker. –

+1

Dies wird (glaube ich) mit zwei aufeinanderfolgenden Zeilen übereinstimmen, die ebenfalls identisch sind. Ich denke, das ist in Ordnung. –

Verwandte Themen