Autor Beitrag
stony007_de
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 12.08.16 10:03 
Moin

ich bin an einem Projekt zur Erkennung von Rechnungen etc. und stehe nun vor der Aufgabe, aus dem ausgelesenen String (in welchem sich einweder der Brutto / Netto oder MwSt. Betrag befindet) die Zahl heraus zu filtern. Wichtig hierbei ich habe in den meisten Fällen den . (<-- Punkt) als tausender Trennung und das , (<-- Komma) als Trennung für Nachkomma Stelle.

Ich habe schon ein wenig mit folgendem herum gebastelt :
ausblenden C#-Quelltext
1:
Regex regexpattern = new Regex(@"(([0-9)]\,*)([0-9)]\.*)*[0-9])");					



das funktioniert auch solang bis die Zahl in summe nicht > 9.999,99 ist.
Beispiel:

Gefundener String: ---> Ergebnis
Bruttosumme 9.943,90€ -------> 9.943,90

Gefundener String: ---> Ergebnis
Bruttosumme 14.543,99€ -------> 543,99


versteh ich nicht ganz warum er das so tun. Hat jemand vielleicht eine bessere Idee für mich?
GeraldVonRiva
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 2



BeitragVerfasst: Fr 12.08.16 11:15 
schau dir nochmal deinen Regexausdruck genau an.

ausblenden C#-Quelltext
1:
new Regex(@"(([0-9)]\,*)([0-9)]\.*)*[0-9])");					


du erlaubst dort nur eine Zahl zwischen 0-9 vor dem . versuche mal so [0-9)]+\.*


mfg

Gerald

Für diesen Beitrag haben gedankt: stony007_de
stony007_de Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 12.08.16 11:22 
das sieht sehr gut aus!

vielen dank
GeraldVonRiva
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 2



BeitragVerfasst: Fr 12.08.16 11:28 
Aber dein Regex für eine Suche nach Werten sieht für mich etwas komisch aus.
Schau dir mal den unteren an.

ausblenden C#-Quelltext
1:
Regex regexpattern = new Regex(@"[0-9\.]*,[0-9]*");					


Dieser Regex erlaubt dann aber auch Zahlenwerte wie 1.22,9977.
stony007_de Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 12.08.16 11:31 
Dad ist mein erster Versuch mit regex. Ich bin mit der syntax noch nicht ganz auf Freundschaft.
Mit deinem Beispiel sollte es korrekt sein?
GeraldVonRiva
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 2



BeitragVerfasst: Fr 12.08.16 11:43 
Dieser Regex findet alle Zahlen und Punkte, solange bis ein Komma kommt. Einen Wert 1.222 ohne Komma findet er nicht. Außerdem findet der Ausdruck auch Werte wie 1.22.2,99999. Als Grundgerüst kannst du ihn erstmal verwenden. Wahrscheinlich wirst ihn mit der Zeit noch etwas verfeinern.

Es gibt auch ganz gut Webseiten wo du deinen Regex testen kannst. Einfach mal eine bekannte Suchmaschine dafür nutzen.
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Fr 12.08.16 12:43 
Moin,

zur Entwicklung von RegEx-Ausdrücken hilft stets RegEx101.

Hier siehst du, was an deinem aktuellen Ausdruck eher schlecht ist, z.B. auch was Gerald angesprochen hat.

BG
Finn
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Fr 12.08.16 12:44 
Ein Beispiel einer solchen Website:

regex101.com/r/iU0qI4/7

Nutze ich persönlich sehr gerne.
Hab ein Pattern, wie ich es nutzen würde, und ein paar Beispiele rein geschrieben.

Es hat vorne ein \s (Leerzeichen) und hinten das €-Zeichen drin um Anfang und Ende der Zahl zu kennzeichnen.
Wenn andere Zeichen besser sind, einfach einfügen.
Die Kennzeichnung muss aber sein, da er sonst Zahlen in mitten einer invaliden Zahl "erkennen" würde. Wie das aussehen würde, siehst Du, wenn Du die Zeichen einfach weg nimmst.