2017-12-25 14 views
1

Ich habe einigen Text, der so formatiert ist:Linienhierarchie Einzüge mit auf Hierarchie Klammern in Notepad ++

line01 
    line01.01 
    line01.02 
     line01.02.01 
     line01.02.01 

Aber ich brauche es wie

(line01(line01.01)(line01.02(line01.02.01)(line01.02.01))) 

zu sein Gibt es eine Möglichkeit zu verwenden, ein Texteditor, um die Einrückungen auf diese Weise in Klammern zu ändern?

+1

warum Sie müssen Notepad ++ dafür benutzen? – snap

+0

Ich kann ein anderes Programm auch verwenden, wenn es eine bessere Lösung dafür gibt. –

+0

Sind alle Einrückungen buchstäblich ein Vielfaches von drei Leerzeichen? Oder gibt es Tabs? – Marathon55

Antwort

1

Sie können die Notepad ++ Regex-Funktion Suchen und Ersetzen verwenden, um diese Aufgabe mit nur wenigen eindeutigen Ersetzungen zu erledigen. Im „Ersetzen“ Dialog, stellen Sie sicher, dass Sie setzen Modus suchen „Regulärer Ausdruck“ und das Feld neben deaktivieren Sie „Spiele Newline“

Der Prozess

durch die Reduzierung jeden indent einen Raum beginnen.Im Beispiel Sie gab, ist ein Gedankenstrich auf drei Räume gleich, so dass Sie bei der Suche nach allen Instanzen von drei Räumen und ersetzt sie mit einem Leerzeichen beginnen würden:

Suchen nach: (drei Leerzeichen)

Ersetzen durch: (ein einzelnes Leerzeichen) (verwenden sie „alle ersetzen“ Taste einmal)

Als nächstes finden sie alle Zeilen, die um sie herum keine Kind-Elemente haben und Klammern gesetzt:

Suchen nach:(^\s*+)(.*?)((?=($(?!\r\n)|\r\n)(?!\1)))

Ersetzen durch:$1\($2\) (verwenden Sie „Alle ersetzen“ Taste einmal)

Als nächstes finden Sie alle Zeilen, die Kind-Gegenstände tun und umgeben die Leitung zusammen mit seine gesamte Gruppe von Kindern in einem einzigen Satz von Klammern:

Suchen nach:(^\s*+)(([^(].*?)(\r\n\1\s+.*)+)

Ersetzen durch:$1\($2\) (Verwendung Button „Alle ersetzen“, bis es keine weiteren Spiele finden)

Schließlich ist der letzte Schritt alle Leerzeichen zu entfernen, die zwischen den Klammern sind, so dass die endgültige Ausgabe wie folgt aussieht Ihr Beispiel Ausgabe:

suchen nach:([()])\s+([()])

Ersetzen durch:$1$2 (Verwendung Button "alle ersetzen", bis es keine weiteren Übereinstimmungen findet)

Beispiel

Probeneingang:

line01 
    line01.01 
    line01.02 
    line01.03 
    line01.04 
     line01.04.01 
     line01.04.02 
     line01.04.03 
     line01.04.04 
    line01.05 
    line01.06 
     line01.06.01 
     line01.06.02 
line02 
    line02.01 
     line02.01.01 
line03 
line04 
line05 
line06 
    line06.01 
     line06.01.01 
     line06.01.01.01 
     line06.01.01.02 

Ausgang (vor alle Leerzeichen entfernen):

(line01 
(line01.01) 
(line01.02) 
(line01.03) 
(line01.04 
    (line01.04.01) 
    (line01.04.02) 
    (line01.04.03) 
    (line01.04.04)) 
(line01.05) 
(line01.06 
    (line01.06.01) 
    (line01.06.02))) 
(line02 
(line02.01 
    (line02.01.01))) 
(line03) 
(line04) 
(line05) 
(line06 
(line06.01 
    (line06.01.01 
    (line06.01.01.01) 
    (line06.01.01.02)))) 

Ausgang (nach allen Leerzeichen entfernen):

(line01(line01.01)(line01.02)(line01.03)(line01.04(line01.04.01)(line01.04.02)(line01.04.03)(line01.04.04))(line01.05)(line01.06(line01.06.01)(line01.06.02)))(line02(line02.01(line02.01.01)))(line03)(line04)(line05)(line06(line06.01(line06.01.01(line06.01.01.01)(line06.01.01.02)))) 
Verwandte Themen