Regex eine unterbrochenen Zahl auslesen

Hallo
ich bräuchte mal eure Hilfe.

Ich möchte einen Text analysieren der 2 Typen von Nummern hat.
Das Problem ist dass dies Nummern unterbrochen sein können.
Zum einen ist es eine Auftragsnummer zum anderen eine Palettennummer.
Die Auftragsnummer startet immer mit 5677 und ist ein 10-stelliger Wert.
Die Palettennummer startet immer mit 510044 und ist ein 19-stelliger Wert

hier ein Beispiel:

Ordernumber: 5677110771

Article: TABLE

Pallets-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5´100443207000001001 408,00 416,00 8,00 1 12.000 62,00 82,00 126,00
5100443207000001002 409,00 417,00 8,00 1 12.000 62,00 82,00 126,00
510044`3207000001003 409,00 417,00 8,00 1 12.000 62,00 82,00 126,00
5100443207000001004 409,00 417,00 8,00 1 12.000 62,00 82,00 126,00

Aktuell hab ich mal diese Regex getestet, die finden auch die Nummer solange diese nicht durch irgend ein Zeichen unterbrochen ist.
Zusätzlich hätte ich gern dass mir bei der Palettennummer die ganze Zeile ohne den Unterbrechungen zurückgeliefert wird.


[5][6][7][7][0-9]{3,}
|
[1][1][0][0][1][9][0-9]{13,}

5677110771
5100443207000001001 408,00 416,00 8,00 1 12.000 62,00 82,00 126,00
5100443207000001002 409,00 417,00 8,00 1 12.000 62,00 82,00 126,00
5100443207000001003 409,00 417,00 8,00 1 12.000 62,00 82,00 126,00
5100443207000001004 409,00 417,00 8,00 1 12.000 62,00 82,00 126,00

hat jemand eine Ahnung ob das und wie das mit Regex umgesetzt werden kann.

vielen Dank
 
Das ist ein bisschen zu wenig Info.

Ist die Anzahl der Datenfelder denn immer gleich?
Sind die "Unterbrechungen" in den Zahlen immer gleich?
 
Vielen Dank für die Antworten.

Also die Palettennummern sind immer gleich lang.
Die Anzahl der Datenfelder bei der Palettennummer ist gleich.

Die Unterbrechungen sind nicht immer an der selben stelle.

Die Daten werden nicht von mir Erzeugt somit ist es schwierig die Unterbrechungen vorher schon zu filtern.

Der Ablauf ist so dass hier ein Pdf mittels OCR eingelesen wird.
Das Pdf wurde mittels Scanner erzeugt, also ist es auch nicht möglich das PDF direkt einzulesen.

Durch das OCR werden hin und wieder Zeichen erkannt die nicht da sind, welche zb Flecken auf dem Blatt Papier waren.

bei diesem Beispiel wurde mir nach dem "5"er ein "´" eingefügt und jetzt erkenne ich die Line nicht als Datensatz für eine Palette

5´100443207000001001 408,00 416,00 8,00 1 12.000 62,00 82,00 126,00

Gibt es eine Möglichkeit das ich mittels regex alle nicht Nummerischen Zeichen bis auf ein Leerzeichen ignoriere, somit würde ich dann die Nummer wieder finden, solange die nicht durch ein Leerzeichen getrennt wird.

Hoffe die Info hilft.

vielen Dank
 
Die Anzahl der Datenfelder bei der Palettennummer ist gleich.

Dann gehe ich mal davon aus, dass Datenfelder immer mit Whitespaces getrennt werden.

Wenn ja, ist es einfach.

1. holst du dir das jeweils erste Feld. Jetzt mal eine Beschreibung in Anlehnung an Perl.

$erstesfeld = (split(/ /, $eingelesene_datenzeile)[0]; ## slice'd

da steht dann zb drin:

5´100443207000001001

jetzt entfernst du alle potentiellen "Sonderzeichen". In Perl etwa:

$erstesfeld =~ s/',\+//g; ## (werfe zB ', und + weg)

dann hast du

5100443207000001001 im string.

Du weisst auch, dass sich diese Zahlen unterscheiden in 5677 und 5100 im Anfang.

Jetzt könntest du du die ersten 4 Ziffern von $erstesfeld extrahieren

$rest = substr($erstesfeld, 0, 4);

und einen Vergleich als string durchführen:
machWatTolles() if ($rest eq "5677 ");


Oder du wendest die Zahl als Regex auf $erstesfeld an:
machWatTolles() if ($rest =~ /^5677.*/); # oder /^5100.*/

Wenn du uns jetzt noch deine Sprache nennst, kriegste bestimmt auch noch nen komplettes Beispiel ;)


Gibt es eine Möglichkeit das ich mittels regex alle nicht Nummerischen Zeichen bis auf ein Leerzeichen ignoriere, somit würde ich dann die Nummer wieder finden, solange die nicht durch ein Leerzeichen getrennt wird.
In Perl gibt es das negieren von regex und sog. lookahead's. Bei deiner Vorgabe mit dem "wandernden ' " erhältst du im besten Fall komplett unverständliche regex.
Stückel das Zeug wie beschrieben und du bist auf der sicheren Seite (und der Code bleibt auch für andere/spaeter noch lesbar).
 
Zurück
Oben