Gunnar Bittersmann: Nochmal Regex gesucht

Beitrag lesen

@@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
0 71

Nochmal Regex gesucht

Pit
  • regex
  1. 0
    ursus contionabundo
    1. 0
      ursus contionabundo
    2. 0
      Pit
      1. 0
        Matthias Apsel
        1. 0
          Pit
          1. 0
            ursus contionabundo
            1. 0
              Pit
              1. 0
                Rolf B
                1. 0
                  Pit
                  1. 0
                    Rolf B
                    1. 0
                      Pit
                  2. 0
                    Rolf B
                    1. 0
                      Pit
                      1. 0
                        Rolf B
                        1. 0
                          Matthias Apsel
                          1. 0
                            Pit
                            1. 0
                              Rolf B
                              1. 0
                                Pit
                                1. 0

                                  So geht es fast...

                                  Pit
                                  1. 0

                                    Diese Zeile krieg ich nicht gematcht

                                    Pit
                                    1. 0
                                      ursus contionabundo
                                      1. 0
                                        Pit
                                        1. 0
                                          Self-Nachtwächter
                                          • programmiertechnik
                                          • programmplanung
                                          • regex
                                          1. 0
                                            Rolf B
                                            1. 0
                                              Pit
                                              1. 0

                                                Lösungsalternative: pdftotext

                                                ursus contionabundo
                                          2. 0
                                            Pit
                                            1. 0

                                              Diese Zeile krieg ich nicht gematcht - weitere Vereinfachung

                                              ursus contionabundo
                                    2. 0
                                      Gunnar Bittersmann
                                      1. 0
                                        Pit
                                        1. 0
                                          Gunnar Bittersmann
                                          1. 0
                                            Pit
                                            1. 0
                                              Rolf B
                                              1. 0
                                                Pit
                                                1. 0
                                                  MudGuard
                                                2. 0
                                                  Pit
                                                  1. 1
                                                    Pit
                        2. 0
                          Pit
                        3. 0
                          Pit
                          1. 0
                            Pit
                            1. 0
                              Rolf B
                              1. 0
                                Pit
                  3. 0

                    Nach Deinen Ergänzungern verbesserte Lösung

                    ursus contionabundo
                    1. 0
                      Pit
                      1. 0
                        ursus contionabundo
                        1. 0
                          Pit
                          1. 0

                            Tips zur Fehlersuche

                            ursus contionabundo
                            • php
                            1. 0
                              Pit
                              1. 0

                                Du bist nicht allein ...

                                ursus contionabundo
                                1. 0
                                  Pit
                  4. 0
                    Gunnar Bittersmann
                    1. 0
                      Pit
                      1. 0
                        Gunnar Bittersmann
              2. 0

                Vorhersehbar untauglicher Lösungsversuch

                ursus contionabundo
              3. 0
                pl
          2. 0
            Matthias Apsel
            1. 0
              Pit
          3. 0
            beatovich
            1. 0
              Pit
      2. 0
        pl
        1. 0
          Pit
          1. 0
            Mitleser
            • meinung
            • regex
          2. 0
            pl
            1. 0
              Rolf B
              1. 0
                pl
                1. 0
                  Rolf B
                  1. 0
                    pl
            2. 0
              Gunnar Bittersmann
      3. 0
        dedlfix
        1. 0
          Pit