2016-03-22 19 views
1

Ich habe ein Dokument mit mehreren Informationen. Was ich will, ist eine Notepad ++ Regex Replace-Funktion zu erstellen, die die folgenden Zeilen im Dokument findet und die Leerzeichen zwischen dem "" mit einem Unterstrich (_) ersetzt.Regex - ersetzen Leerzeichen in Zeile (Notepad ++)

Beispiel: Die Linie ist:

&LOG Part: "NAME TEST.zip" 

Das Ergebnis sollte:

&LOG Part: "NAME_TEST.zip" 

Die perfekte Lösung wäre, dass die Regex findet die & LOG-Teil: "NAME TEST.zip" Linien und ersetzt das Leerzeichen durch eine Unterstreichung.

Was ich jetzt versucht habe, ist dieser Ausdruck den Text zwischen dem "„zu finden:

\"[^"]*\" 

Es sollte es tun, aber ich weiß nicht, welcher Ausdruck die Leerzeichen zu ersetzen verwenden, um mit eine Unterstreichung.

Jeder könnte mit einer Lösung helfen? Danke!

Antwort

0

Die passt nur ganze Teilstrings von " bis zu einem anderen " am nächsten, ohne dass die einzelnen Leerzeichen übereinstimmen, die Sie ersetzen möchten.

Da Notepad ++ keine unendliche Breite Lookbehind unterstützen, die einzig mögliche Lösung wird unter Verwendung des \G - basierten regex die Grenzen festzulegen, und mehrere Übereinstimmungen verwenden (diese wird mit 1 _ aufeinanderfolgenden Leerzeichen ersetzt werden):

(?:"|(?!^)\G)\K([^ "]*) +(?=[^"]*") 

Oder (wenn jeder Raum sollte mit einem Unterstrich ersetzt werden):

(?:"|(?!^)\G)\K([^ "]*) (?=[^"]*") 

und ersetzt mit $1_. Wenn Sie auf den Ersatz innerhalb &LOG Part nur beschränken müssen, fügen Sie ihn einfach an den Anfang:

(?:&LOG Part:\s*"|(?!^)\G)\K([^ "]*) (?=[^"]*") 

enter image description here

Eine menschenlesbare Erklärung der Regex:

  • (?:"|(?!^)\G)\K - suchen " oder, mit jeder nachfolgenden erfolgreichen Übereinstimmung, das Ende der vorherigen erfolgreichen Übereinstimmungsposition, und den gesamten Text im Puffer wegzulassen (dank \K)
  • ([^ "]*) - (Group 1, accessed with $ 1 from the replacement pattern) 0+ characters other than a space and „`
  • + - ein oder mehr wörtlichen Räume (ersetzen mit \h all horizontalen Leerzeichen Übereinstimmen oder \s jedes Leerzeichen entsprechen)
  • (?=[^"]*") - prüfen, ob ein doppeltes Anführungszeichen vor der aktuellen Position
+0

Danke für die Antwort!Ich habe aber auch andere Zeichenfolgen, die unbeeinflusst beibehalten sollte: Beispiel: & LOG-Teil: "NAME TEST.zip" & LOG Cloning: "TEST_TEST" & LOG Container: "BLA BLA" Nur der & LOG Teil Linie genommen werden sollte berücksichtigt und die Räume durch Unterstreichungen zwischen den "" ersetzt. Alle anderen Zeilen (Klonen, Container) sollten nicht betroffen sein. Da ich ein Anfänger bin, können Sie bitte eine andere Lösung für Notepad ++ empfehlen oder wäre es möglich, sie trotzdem zu verwenden? Danke für die Antwort! – Nikec123

+0

Danke für die Lösung und Erklärung! Es funktioniert perfekt! – Nikec123

Verwandte Themen