Fragensteller
REGEX - Positive Lookbehind + ignorieren aller Leerzeichen + Auslesen eines Betrags

Frage
-
Hallo zusammen,
ich stehe gerade vor der Aufgabe für ein DMS mit REGEX einen Betrag auszulesen, der nach etlichen Leerzeichen kommt.
Sieht so aus:
Zwischensumme 345.00
Mit dem Befehl hier kann ich das gesamte nach "Zwischensumme" schon auslesen:
(?<=Zwischensumme)\s*(\d{1,8}[\.]\d{2})
hinderlich sind aber die gesamten Leerzeichen, die die OCR mit ausliest. Es muss doch eine Möglichkeit geben, den Betrag hier ohne die Leerzeichen auszulesen.
Danke für Eure Hilfe im Voraus.
Gruß Marcel
Alle Antworten
-
Hallo Marcel,
versuche mal dieses Pattern:
(?<=Zwischensumme\s*)(\d{1,8}[\.]\d{2})
Du betrachtest ja mit dem Lockbehind nur noch den Teil nach der Bedingung, also nimmst Du die Leerzeichen mit in die Bedingung, und es bleibt nur noch der Betrag übrig.
Grüße
Roland
- Bearbeitet Roland Franz Freitag, 13. Juli 2018 13:05
-
Hi, wie immer führen viele Wege nach Rom.
Hier noch mein Vorschlag (mit einem kleinen Konsolen-Test):
string[] txtArr = { "Zwischensumme 345.00 ", "Zwischensumme 345.00 ", "Zwischen 345.00 ", "Zwischensumme 345.00 ", "Zwischensumme 345.00", "Zwischensumme 345.00 ", "Zwischensumme345.00 " }; string re1 = "(Zwischensumme)"; string re2 = ".*?"; string re3 = "([+-]?\\d*\\.\\d+)(?![-+0-9\\.])"; Regex r = new Regex(re1 + re2 + re3, RegexOptions.IgnoreCase | RegexOptions.Singleline); foreach (var txt in txtArr) { Match m = r.Match(txt); if (m.Success) { String word1 = m.Groups[1].ToString(); String float1 = m.Groups[2].ToString(); Console.Write("(" + word1.ToString() + ")" + "(" + float1.ToString() + ")" + "\n"); } }
Gruß
Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP
-
Hallo Marcel,
wenn meinst Du mit scheint leider nicht zu funktionieren?
Mein Pattern habe ich mit jeder beliebigen Kombination von Inputstrings getestet.
Als Ergebnis wurde immer 345.00 geliefert.
Oder habe ich Deine Frage falsch verstanden?
Ich kann auch gerne mal ein Beispielprogramm einstellen.
Grüße
Roland
-
Anhand Deiner Beschreibung im ersten Post hat aber Dein angegebenes Pattern genau das richtige Ergebniss geliefert.
Hier mal das Testprogramm in C#
// Drei Beispiele: Console.WriteLine( Regex.Match(@"Zwischensumme 345.00", @"(?<=Zwischensumme\s*)(\d{1,8}[\.]\d{2})").Value); Console.WriteLine(Regex.Match(@"Zwischensumme345.00", @"(?<=Zwischensumme\s*)(\d{1,8}[\.]\d{2})").Value); Console.WriteLine(Regex.Match(@"xx Zwischensumme 345.00", @"(?<=Zwischensumme\s*)(\d{1,8}[\.]\d{2})").Value); Console.Read();
Was kommt den bei Deinem Programm mit meinem Pattern als Ergebnis?