Regex Thema


danyboy

Grünschnabel
#1
Hallo Zusammen

Ich brauche Eure Hilfe bezüglich Regex. Ich habe ein neues ecoDMS System und sollte dort den Rechnungsbetrag einlesen können.

Mit der Deutschen Schreibweise der Zahlen funktioniert dies aber leider mit der Schweizer Variante nicht.

Deutschland = 1.234,12 Thausender sind punkte und Decimal ist ein Komma
Dies ist der Code vom Hersteller:
Code:
REGEX:(?<=Nettosumme:)([\s]*)\d{1,8}([\.,]\d{2})
Was ich brauche ist aber:
Schweizer = 1'234.15 Thausender sind Apostrofe und Decimal ist ein Punkt

Nettosumme: = 1'234.15
1'234.15
-1'234.15
Also Auslesen Wenn Nettosummer steht mit dem Betrag das den Betrag auslesen.

Wäre sehr dankbar wenn mir das jemand helfen könnte und mir das vielleicht ein kurz beschreiben könnte
Habe eben schon vieles Probiert auf alle arten und kriege es nicht hin.

Danke Euch
und Happy New Year
Dany
 
Zuletzt bearbeitet von einem Moderator:

ComFreek

Mod | @comfreek
Moderator
#2
Ich sehe nicht ganz, wie dein bestehender Regex überhaupt die dt. Schreibweise "1.234,56" matched. Siehe Regex101 - online regex editor and debugger für eine Livedemo. Es wird nur "1.23" gematched. "4,56" wird vollkommen ignoriert.

Es wäre sehr hilfreich, auch den Code zu sehen, der diesen Regex benutzt und wie dieser die gematched Werte weiterverwendet.
 
#4
Hallo Zusammen,

da ich aktuell ebenfalls mit ecoDMS arbeite und versuche einen REGEX Befehl zu formulieren, hänge ich mich einmal an diese Frage an und hoffe, dass mir jemand helfen kann.

Im Dokument kann folgende Textzeile stehen: SEPA-Überweisung 100.000,00+
Wobei die Überweisungssumme erst mehrere Zentimeter nach dem Stichwort folgt.

Wenn dies wirklich im Dokument steht, soll der überwiesene Betrag vollständig ausgegeben weden. (100.000,00+)
Wenn SEPA-Überweisung nicht im Dokument steht, soll eine 0 ausgegeben werden.

Soweit ich weiß, muss man dafür einen If-Then-Else Befehl verwenden, der wie folgt aufgebaut sein muss.
(?("IF")"THEN"|"ELSE")

Leider kriege ich diesen Befehl nicht zum laufen.
Getrennt kann ich mir die Überweisungsumme ausgeben lassen, aber wenn ich dann auch noch das Kriterium mit der 0 einfüge, wir am Ende immer nur 0 ausgegeben.

Ich hatte folgendes probiert:

Code:
REGEX:(?(?<=SEPA-Überweisung)(([\s]*)\b([\S]*)([\D])\b))|0)

(?
IF:     (?<=SEPA-Überweisung)
THEN:    (([\s]*)\b([\S]*)([\D])\b)
ELSE:    |0
)
An einer anderen Stelle verwende ich ebenfalls den THEN-Code und dort liefert dieser die Summe im richtigen Format.

Ich würde mich sehr freuen, wenn mir jemand bei diesem Problem helfen kann.

Viele Grüße und einen guten Start in die Woche
Markus
 
#7
Es würde mir auch reichen, wenn das entsprechende Ausgabefeld in ecoDMS einfach leer bleiben würde, wenn es keine SEPA-Überweisung gab. Aber wenn ich nur den Befehl zur Suche nach dem Wort "SEPA-Überweisung" verwende und das Stichwort dann nicht im entsprechenden Bereich vorkommt, spuckt mir ecoDMS einfach alle Wörter aus, die in diesem Bereich stehen :/ Daher kam ich auf die Idee mit dem If-Then-Else Befehl zu arbeiten.
 

Yaslaw

n/a
Moderator
#10
Also, im Pattern steuert man nicht, was ausgegeben wird. Nur, welcher Bereich eines String ausgegeben wird.

Ich kenne ecoDMS nicht. Aber ansonsten kann man mit einem Regex neben dem extrahieren meistens auch testen.

Beispiel in Pseudocode
Code:
myRegExObj.Pattern = '^SEPA-Überweisung\s+(?<value>[\d\.,]+)(?<sign>[+-])$'
foreach(lines in Text => line){
  if(myRegExObj.test(line){
    parts = myRegExObj.execte(line)
    retValue = parts('sign') & parts('value')
  }else{
    retValue = 0
  }
}
 
#11
Hallo,

ich habe aktuell auch Probleme mit den RegEx in ecoDMS und habe dazu nur diesen (alten) Thread gefunden.
@danyboy: Mich wundert, dass die RegEx aus dem Handbuch bei dir mit Beträgen in deutscher Schreibweise funktioniert. Denn bei mir tut sie das nicht. Das Problem ist, dass die Tausendertrennzeichen (Punkte) bei der nachgeschalteten Umwandlung in eine Zahl als Dezimaltrennzeichen interpretiert werden (wie bei der amerikanischen Schreibweise). Dadurch wird aus "1.234,12" dann 1,23 (wie ComFreak ja schon sagte) oder bestenfalls 1,23412. Da die ecoDMS-interne Umwandlung des durch die RegEx erkannten Betrages durch die RegEx leider nicht beeinflusst werden kann. Hast du (oder sonst jemand) das Probelm inzwischen gelöst? Und wenn ja: wie?
 
Zuletzt bearbeitet: