Hilfe bei Regex - Erstellung

beta20

Top Contributor
Hallo zusammen,

ich benötige Hilfe bei der Erstellung von Regex Patterns.
Was mache ich:
Ich lese eine Rechnung / Angebot per OCR (Tess4j) ein und bekomme anschließend einen String. Diesen String möchte ich nun auswerten und mir die einzelnen Dinge (Rechnugnsnummer, Rechnungsdatum etc. speichern).

Was ich nun benötige ist Hilfe bei der Erstellung der Regex Patterns.
In rot ist jeweils der Wert, den ich benötige.
Diesen kann ich ja mittels Regex Expression bekommen:

Code:
String regExp = "Gesamtbetrag ([A-Z]{3}) (\\d+,\\d\\d)"; 
int value= 1;
String text = "vvv yvä vöä g gdfsg dfs Gesamt Netto 125,00 MwSt. 19% 23,75 Gesamtbetrag EUR 148,75";
Matcher matcher = Pattern.compile(regExp).matcher(text);
matcher.find();
System.out.println(matcher.group(value));

Für folgende Dinge benötige ich die Regex Expression. Ich habe jeweils Beispiele aufgelistet und eine Idee wie die allgemeine Funktion aussehen soll.
Prinzipiell geht es um die REGEX von z.B. "RECHNUNGSNUMMER", also die rotmarkierten, sollten später in Regex-Code umgewandet werden.

1) Rechnungsnummer:

Beispiele:
Rechnung WoAx-605/2014
Rechnung Nr. 2015-08-1001
Rechn-Nr.: 9
Rechnungsnummer: Rg. 20979.19
Rechnungs-Nr.: 1115369
Rechnung Nr.: 1115369
RECHNUNG Nr. 2484231
R.nummer: 123456
Rechn.Nummer 45A54654

Allgemein:
-> Ich kann immer den Text davor schreiben (Rechnung, Rechnung Nr.)
-> Nun möchte ich natürlich die wirkliche Rechnungsnummer.

2) Rechnungsdatum:

Beispiele:
Datum: 22.12.2014
Rechnungsdatum: 22.12.2014
Belegdatum 22.12.2014

Allgemein:
Text: 24.12.2014
Text 24.12.2014
-> Könnte aber auch in anderen Datumformaten sein!

3) Bruttopreis:
Gesamtsumme (Brutto): 1.950,59
Gesamtbetrag 130,95 EUR
Gesamtbetrag von 1190,00
Summe (brutto): 123,00
Brutto: 123,00 EUR
Rechnungsbetrag 123
Rechnungsbetrag in EUR 123
Gesamtbetrag (brutto) 123,00
Zahlungsbetrag (brutto) 123,00
Summe Produkte 23,05
Gesamt-Brutto 123,00
Bruttobetrag 123,00 EUR
Gesamtsumme 123
Zahlbetrag 1.256,00 EUR
Rechnungsbetrag 1.256 EUR
Bruttowert: 123 EUR

Allgemein:
Text EUR 124
Text EUR 124
Text € 124
Text: € 124
Text 124 EUR
Text:124 EUR
Text 124
Text:124

4) Währung:

Beispiele:
Währung: EUR
Zahlungsbetrag (brutto): 20,99
Gesamtsumme (Brutto): 1.950,59 EUR
Gesamtbetrag 130,95 EUR
Gesamtbetrag von 1190,00 EUR
Summe (brutto): 123,00
Brutto: 123,00 EUR
Rechnungsbetrag 123
Rechnungsbetrag in EUR 123
Gesamtbetrag (brutto) 123,00
Zahlungsbetrag (brutto) 123,00
Summe Produkte 23,05
Gesamt-Brutto 123,00
Bruttobetrag 123,00 EUR
Gesamtsumme 123
Zahlbetrag EUR
Rechnungsbetrag EUR

Allgemein:
Text EUR 124
Text EUR 124
Text € 124
Text: € 124
Text 124 EUR
Text:124 EUR
Text 124 €
Text:124 €

5) Fälligkeit

Beispiele:
bis zum 14.08.2015
Zahlung bis zum 21.11.2018
Zahlung bis 21.11.2018
innerhalb von 10 Tagen
innerhalb von 14 Tagen nach

Allgemein:
Text 24.12.2018
Text 10 Tage

6) MWST

Beispiele:
Nettowert 19%
Bruttowert 19%
MwSt.-Satz: 19,00 %
Umsatzsteuer 19%
19,00% MwSt. EUR
MwSt. 19%
Nettowert 19%
enthaltene MwSt.: 4.79 EUR (19%)
Mwst. Betrag:19%
USt 19%

Allgemein:
Text 19%
Text: 19%
Text 19,00 %
Text: 19,00 %
Text: 4.79 EUR (19%)


7) IBAN

Beispiel:
DE14700400608233249211
DE14700400608233249211
-> kann auch Leerzeichen enthalten

8) Emailadresse
-> Sollte klar sein

9) UST

Beispiel:
USt-ID: DE254227777
USt.-ID: DE305822030
USt-IdNr.: DE297631794
USt-IdNr. DE297631794
-> kann auch Leerzeichen enthalten


10) Homepage
-> Sollte klar sein

Danke für jede Hilfe
 
Moin,
WTF?? 😕
Suchst EIN Regex für ALLE roten Ausdrücke oder EIN Regex für JEDEN EINZELNEN roten Ausdruck??
Was hast Du denn bis her alles versucht?
Das wird Dir keiner fertig liefern - schon gar nicht für alle Ausdrücke.
Dies ist auch wohl kaum etwas fürs Anfänger-Forum!! Poste es ggf. hier https://www.java-forum.org/forum/private-stellangebote-und-stellensuche-von-usern.97/

Hier aber mal ein sehr guter Regex-Tester und -Debugger zum Selberbasteln 😉 https://regex101.com/

VG Klaus
 
Danke für den Link, hilft mir sehr weiter.
Jedoch schon Mal die Frage:
Wenn ich zwei unterschiedliche Formate bei der Währung habe:
  • 1.656.659,50
  • 1,656,659.50
Schaffe ich das in ein Regex zu packen?
Habe folgendes probiert:
(0-9|.+,\d\d)|(0-9|,+.\d\d)

Das geht aber nicht 100%. Die letzten 3 Zahlen matchen nicht bei : 165,565,950.00
 
Danke für den Link, hilft mir sehr weiter.
Jedoch schon Mal die Frage:
Wenn ich zwei unterschiedliche Formate bei der Währung habe:
  • 1.656.659,50
  • 1,656,659.50
Schaffe ich das in ein Regex zu packen?
Habe folgendes probiert:
(0-9|.+,\d\d)|(0-9|,+.\d\d)

Das geht aber nicht 100%. Die letzten 3 Zahlen matchen nicht bei : 165,565,950.00


2) Rechnung WoAx-605/2014
Regex: Rechnung (.+)
-> Geht soweit, aber wenn ein Wort danach kommt, dann matched auch dieser: Rechnung WoAx-605/2014 FALSCHESWORT
-> Wie bekomme ich nur Rechnung WoAx-605/2014
 
Habe folgendes probiert:
(0-9|.+,\d\d)|(0-9|,+.\d\d)

Das geht aber nicht 100%. Die letzten 3 Zahlen matchen nicht bei : 165,565,950.00
Das: (0-9|.+,\d\d) matcht nicht nur bei Zahlen, sondern bei jeder Zeichenfolge, die mit einem Komma und zwei darauf folgenden Ziffern endet.
Und das: (0-9|,+.\d\d) matcht auf die Zeichenfolge 0-9 sowie sämtliche Zeichenfolgen, die mit einer beliebig langen Folge von Kommata beginnen auf die ein beliebiges Zeichen und zwei Ziffern folgen.

2) Rechnung WoAx-605/2014
Regex: Rechnung (.+)
-> Geht soweit, aber wenn ein Wort danach kommt, dann matched auch dieser: Rechnung WoAx-605/2014 FALSCHESWORT
-> Wie bekomme ich nur Rechnung WoAx-605/2014
Z.B.: Rechnung (\S+)
 

Zurück
Oben