RegEx-Stringformatierung in Notepad++

RegEx-Stringformatierung in Notepad++

Ich bin ziemlich gut in RegEx, aber es gibt eine Sache, bei der ich einfach nicht dahinterkomme, wie es funktioniert.

Wie kann man in NotePad++ suchen/ersetzen und sicherstellen, dass die Ausgabe eine feste Länge hat, während die Eingabe flexibel sein kann?

Wenn Sie beispielsweise einen regulären Ausdruck dafür ausführen, 23-6-2016wird daraus: 23-06-2016(zusätzliche 0 für 06, aber nicht, wenn es beispielsweise 12 ist)

Eine andere Möglichkeit besteht darin, Folgendes zu erstellen:

TestStringund Testwürde zu
TestString______________________(zusätzliche Leerzeichen)
Test____________________________(zusätzliche Leerzeichen) werden.

Die Idee besteht hier natürlich darin, eine Massensuche/-ersetzung durchzuführen, bei der die Ausgabe durchgehend die gleiche Länge aufweist.

Erläutern Sie bitte den Gedanken dahinter.

BEARBEITEN: Um eine Vorstellung von den Daten zu geben, mit denen ich arbeite, hier eine Beispielzeile, die ich verarbeiten muss:

12345678    TXT 19700101    0   100 20160624    100 Comment text
12345678    TXT 19700101    100 100,25  20160624    0,25    Comment text
12345678    TXT 19700101    100,25  100,5   20160624    0,25    Comment text

Beachten Sie, dass diese durch Tabulatoren getrennt sind. Die erste 0 in der ersten Zeile sollte als 0,00 formatiert werden, die 100 als 100,00, aber die 12345678 und die Daten sollten nicht mit ,00 formatiert werden. Die letzten 100,5 sollten als 100,50 formatiert werden.

Das mit dem Datum habe ich schon erledigt, daher ist das im Moment nicht so wichtig.

Antwort1

Als Antwort auf:

12345678 TXT 19700101 0 100 20160624 100 Kommentartext
12345678 TXT 19700101 100 100,25 20160624 0,25 Kommentartext
12345678 TXT 19700101 100,25 100,5 20160624 0,25 Kommentartext

Für die vierte Spalte:
^((?:\S+\s+){3}\d+)(\s)bis \1,0\2
^((?:\S+\s+){3}\d+,\d)(\s)bis\10\2

Für die 5./7. Spalte gilt:
analog zu oben, nur in der Regel jeweils {3}durch {4}/ ersetzen{6}

Erläuterung
1. Regel

Der1. Regel,0wird an Zahlen ohne angehängt ,. Jetzt müssen alle Zahlen haben ,\d.

2. Regel

Der2. Regelhängt ein 0an diejenigen mit einer einzelnen Ziffer nach dem Komma an.

Wie für(?:):Nichterfassungsgruppe, die vorherigen Spalten sind bereits erfasst, \1eine zusätzliche Erfassung ist daher nicht erforderlich.

Dadurch wird die Zahl nur auf 2 Dezimalstellen aufgefüllt. Um einen beliebigen Betrag aufzufüllen, verwenden Sie den pad excessively, then trimAnsatz.

Letztes Wort?
Meiner Meinung nach sind einfache reguläre Ausdrücke wie in Notepad++ für diese Aufgabe nicht geeignet. Einige einfache Skripte wie Bash oder Perl hätten dies mit viel besserer Lesbarkeit erledigt.

Antwort2

Abschnitt A: Aufpolstern auf bestimmte Länge

Um Zeilen mithilfe regulärer Ausdrücke rechts mit N Zeichen aufzufüllen, fügen Sie am Ende der Zeile N Leerzeichen hinzu und gruppieren Sie anschließend die ersten N Zeichen und ersetzen Sie den Rest.

Durchgang 1: Füllzeichen hinzufügen

$Ersatz finden :______________________________

Fügen Sie am Ende der Zeile 30 Leerzeichen hinzu. (Ich habe Unterstriche verwendet, da Leerzeichen im Beitrag nicht formatiert wären.)

Durchgang 2: 30 Zeichen links kürzen

Um ein durch Bindestriche getrenntes Datum am Anfang einer Zeile aufzufüllen, passen Sie jeden Abschnitt entsprechend an.

Suchen: ^([[:print:]]{0,30}).*$ Ersetzen durch\1

Ersetzen Sie am Anfang der Zeile eine Gruppe von bis zu dreißig druckbaren Zeichen, gefolgt von den verbleibenden Zeichen, durch diese Gruppe.

Um eine andere Zeilenlänge auszuwählen, verwenden Sie in Durchgang 1 n-Leerzeichen und ersetzen Sie dann 30 durch die Länge in Durchgang 2.

Abschnitt B: Zeile beginnend mit Datum

Pass 1 (Tag des Monats):

Suchen nach: ^([0-9])- Ersetzen durch:0\1-

Ersetzen Sie das Muster (Zeile, die mit einer einzelnen Ziffer beginnt, gefolgt von einem Bindestrich) durch die aufgefüllte Null, die Ziffer und den Bindestrich.

Pass 2 (Monat):

Suchen nach: -([0-9])- Ersetzen durch:-0\1-

Ersetzen Sie das Muster (eine einzelne Ziffer zwischen zwei Bindestrichen) durch einen Bindestrich, die aufgefüllte Null, die Ziffer und den Bindestrich.

verwandte Informationen