2016-06-29 8 views
0

Ich versuche jedes Vorkommen von 4 führenden Leerzeichen in jeder Zeile einer Datei auszuwählen, um sie durch 2 Leerzeichen zu ersetzen, um neu zu formatieren. Die Find All regex Ich landete mit wurde:Gibt es eine kompaktere Regex für diesen Lookbehind?

^ {4}|(?<=^ {4}) {4}|(?<=^ {8}) {4}|(?<=^ {12}) {4}|(?<=^ {16}) {4} 

Ich habe a demo here gemacht zeigt genau, wie ich es erwarten, dass die Datei zu markieren.

Gibt es einen besseren Weg, dies zu erreichen? Hinweis Ich möchte mit Sublime Text jede Gruppe von vier Leerzeichen einzeln auswählen. Ich möchte nicht, dass jede Zeile, die führenden Leerraum enthält, in einer Auswahl enthalten ist.

+0

Wie funktioniert die Verwendung von ['\ G' zum Kleben] (http://www.regular-expressions.info/continue.html) zum Zeilenanfang, [siehe Demo bei regex101] (https: // regex101. com/r/yX5vQ2/1). Eigentlich würde dies keinen Lookbehind erfordern, aber ohne dass es [viel mehr Schritte] erfordert (https://regex101.com/r/xN0pV0/1). –

Antwort

1

^(?:() )(?:() )?(?:() )?(?:() )? ersetzen mit \1\2\3\4

funktionell gleichwertig ist und Lookbehind nicht erforderlich.

Es erfordert etwa 9% des Aufwands für die Regex-Engine (702 vs 7680 Schritte).