RegEX: Betrag aus Zeichenkette identifizieren


canju

Mitglied
Hallo liebe Forengemeinde,

ich möchte mit einem DMS, welches Reguläre Ausdrücke unterstützt den Gesamtbetrag eines Kassenbons auslesen.
Mühe mich hier gerade ab, aber irgendwie krieg ich es nicht hin:

Die betroffene Zeile die ich auslesen möchte sieht so aus: SUMME [1] EUR 9,50
In den eckigen Klammern [1] steht jeweils die Anzahl der gekauften Produkte, diese variiert daher und sollte beliebig groß sein können.
Es handelt sich zwischen den Elementen um mehr als ein Leerzeichen (variiert ebenfalls), lässt sich im Post nur nich so darstellen.

Ich möchte jetzt nur die 9,50 ausgelesen bekommen.

Mein bisheriger RegEx Auszug:
(?<=SUMME)([\s]*)(?<=\[[0-500]\])([\s]*)(?<=EUR)([\s]*)\d{1,8}([\.,]\d{2})

Hoffe einer von euch Profis kann mir helfen.

Beste Grüße,
Canjuma
 

canju

Mitglied
Hey Yaslaw,

danke für die Blitzreaktion.
Laut regex 101 funzt es und ich bekomme nur die 9,50 ausgegeben.

Wenn ich es allerdings ins ecoDMS hinzufüge, funzt es nicht. Ich markieren in ecoDMS einen Ausschnitt des Kassenbongs, der wesentlich größer ist als eine Zeile, um unterschiedlich lange Kassenbongs abzudecken.

Kann es daher evtl. an dem größeren Bereich (Also größer als eine Zeile) liegen, dass es nicht funzt?
Bin absoluter Newbie in RegEX, daher sorry falls das ne dumme Frage ist :)
 

Yaslaw

n/a
Moderator
Dann bring mal passende Testdaten..

Kannst du Paramter mitgeben? Wenn ja, nimm den Multiline mit rein.
Kann ecoDMS auf einen Substring zugreifen oder nimmt er nur den ganzen Treffer?

Gibt es ev. eine Doku zum RegExp in ecoDMS?
 

canju

Mitglied
Als Testdaten kann ich dir höchstens den Kassenbong schicken.
ecoDMS hat hier einige Bespiele veröffentlicht die ich auch schon anwenden konnte. Es wird zusätzlich auf die qt.io RegEx Hilfe verwiesen.

Hier habe ich bspw. versucht den Eintrag:
REGEX:(?<=Nettosumme:)([\s]*)\d{1,8}([\.,]\d{2})
Um die entsrepchenden Stellen zu erweitern.
 

Yaslaw

n/a
Moderator
Sieht aus, als ob er den ganzen gefunden String zurückgibt und nicht mit Unterstrings arebitet. Das macht es nicht einfach, da man in einem Positive Lookbehind keine Quantifier setzen kann. Das geht dann mit den beliebigen Leerzeichen und dem Zwischenteil nicht auf.

Wenn man den hinteren Tei anschaut. Ist bei den anderen Zeilen ebenfall Währung&Abstand&Betrag EUR 1,1 oder ist das nur bei der Summenzeile?
 

canju

Mitglied
Genau, auf dem Kassenbong gibt es nur einmal "SUMME", somit würde das Wort "SUMME" entsprechend für "eindeutigkeit"der Zeile sorgen.
 

Yaslaw

n/a
Moderator
Ich weiss. ABer das geht nicht, da du zwischen Summe und dem Wert Variable Sachen hast. Wie es scheint nimmt den CMS nur den ganzen Treffer. Also muss man mit (?<= etc. arbeiten, damit die Summe und die Anzahl und der Wert nicht ausgegeben werden. Innerhalb von (?<= gehen aber die Qualifier nicht.

Also versuche ich den String von HInten zu lesen. Und da ist der nächste Aufhänger die Währung. Darum meine unbeantwortete Frage.

Wenn ich mal den ganzen Kassenbon sehen würde, könnte ich besser helfen. Aber auch das hatte ich ja schon gefragt.
 

Yaslaw

n/a
Moderator
Auf dem Kassenbon sieht man, dass die Kombination EUR\sNummer nur 2 mal vorkommt. Und der erste Treffer ist der gesuchte.

Probier es doch mal mit (?<=EUR)([\s]*)\d+([\.,]\d{2})