@@Pit
… daher würde ich das Pferd gerne von hinten aufzäumen.
Dann mach das doch.
- Der Betrag steht immer am Ende der Zeile.
Das ist dann also irgendwas in Klammern ()$
Betrag hört mit zwei Ziffern auf, davor ein Komma: (,\d{2})$
Vor dem Komma eins bis drei Ziffern: (\d{1,3},\d{2})$
Davor können weitere Ziffern stehen, abgetrennt durch Punkt als Tausendertrennzeichen: ((?:\d{1,3}\.)*\d{1,3},\d{2})$
(?:…)
gruppiert, ohne dass sich das Eingeklammerte gemerkt wird. Von diesen Gruppen kann es belibig viele (auch keine) geben: (?:…)*
. Der Backslash in \.
maskiert den Punkt, der ja in RegExp ein Sonderzeichen ist.
Stimmt aber so nicht, da zwischen Punkten bzw. zwischen Punkt und Komma immer genau drei Ziffern stehen müssen. Also die Gruppe verschoben: (\d{1,3}(?:\.\d{3})*,\d{2})$
- Mein ABC oder XYZ Wort steht immer durch Leerzeichen getrennt vor dem Betrag.
Genau ein Leerzeichen? (\d{1,3}(?:\.\d{3})*,\d{2})$
Darf’s auch ein bisschen mehr sein? +(\d{1,3}(?:\.\d{3})*,\d{2})$
- Die Zahl, die ich auch benötige, steht immer durch Leerzeichen getrennt vor dem ABC-/XYZ-Wort
Die feststehenden Wörter als Optionen: (ABC|XYZ) +(\d{1,3}(?:\.\d{3})*,\d{2})$
Leerzeichen davor: +(ABC|XYZ) +(\d{1,3}(?:\.\d{3})*,\d{2})$
Ganzzahl davor, d.h. beliebig viele, mindestens eine Ziffer: (\d+) +(ABC|XYZ) +(\d{1,3}(?:\.\d{3})*,\d{2})$
- Alles was dann noch durch Leerzeichen getrennt links vor dem ABC-/XYZ-Wort steht brauche ich genau bis zum letzten Vorkommen plus Stringlänge eines Ausdrucks, der mit AB anfängt und dann ein weiteres Zeichen (Buchstabe oder Ziffer) hat und anschließend eine oder beliebig viele Ziffern bis zu einem Leerzeichen enthält.
Davor also noch ein String aus beliebigen Zeichen: (.*) +(\d+) +(ABC|XYZ) +(\d{1,3}(?:\.\d{3})*,\d{2})$
Dieses AB-Dingens willst du aber nicht haben: AB.\d* +(.*) +(\d+) +(ABC|XYZ) +(\d{1,3}(?:\.\d{3})*,\d{2})$
Vor dem AB-Dingens kann aber noch was stehen: (?:.* +)*AB.\d* +(.*) +(\d+) +(ABC|XYZ) +(\d{1,3}(?:\.\d{3})*,\d{2})$
Diesen Ausdruck in meinem Texteditor auf
AB0006777 Lore Ipsum 25 ABC 3,72
AB09899 AB00067127 At vero, eos et 2 1 XYZ 13,11
AB0007711 CD0TZUUZ AB899979 At vero eos et 10 100 XYZ 1.223,50
losgelassen und durch $1;$2;$3;$4
(die geklammerten gemerkten Teile durch Semikolons getrennt) ersetzt ergibt:
Lore Ipsum;25;ABC;3,72
At vero, eos et 2;1;XYZ;13,11
At vero eos et 10;100;XYZ;1.223,50
LLAP 🖖
„Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann