Hallo,
Ich bastle mir gerade einen Parser, der die erste Zahl (Ganzzahl oder Kommazahl) aus einem Text extrahieren soll. Bsp.:
"3mm - 4mm" -> 3
"von 4 Uhr bis 5 Uhr" -> 4
"4,545kg und 6,4kg" -> 4.545
Dazu ersetze ich alle Zeichenketten, die nicht dem Muster 'Ziffer' oder 'ZifferKomma' entsprechen durch ein Leerzeichen.
Als entsprechende Regex dafür habe ich [^(\d+,?)] genommen. Funktioniert aber nicht.
Kennt sich jemand mit RegEx aus und kann mir helfen?
Danke,
Stephan
Warum so kompliziert?
Nimm doch lieber Regex.Match mit einem Ausdruck der die Zahl direkt trifft:
Match zahl = Regex.Match(text, @"(\d+(,\d*)?)", RegexOptions.IgnoreCase);
using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}
Vielen Dank, funktioniert. Ich hab's leicht modifiziert, um auch negative Zahlen zu erwischen: @"-?\s+\d+(,\d+)?"
Bitte, 😁
darf ich fragen für was das "\s+" in dem Ausdruck gut ist?
Damit wird der Ausdruck nur gefunden wenn vor der ersten Zahl (bzw. zwischen dem Vorzeichen und der ersten Zahl) ein Leerraumzeichen steht.
Bei deinen Beispielen aus dem ersten Posting werden beim 1. und 3. dann statt den ersten die zweiten Zahlen gefunden.
using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}
darf ich fragen für was das "\s+" in dem Ausdruck gut ist?
Der Ausdruck ist schlecht, denn er muss natürlich wenn dann @"-?\s?\d+(,\d+)?" lauten, damit auch negative Zahlen erkannt werden, bei denen der Schreiber ein Leerzeichen zwischen Vorzeichen und Zahl geschrieben hat.
Aber um ehrlich zu sein, muss ich erst in der Praxis austesten, ob dieser Fall überhaupt vorkommt, denn mit dem möglichen Leerzeichen kann es auch zu ungewollten negativen Zahlen kommen, bei eingeschobenen Sätzen. Bsp.:
"Heute morgen - 5 oder 6 Uhr - ging die Sonne auf!"
Hallo steschu,
Herbivore hat ein Tool geschrieben mit dem man reguläre Ausdrücke gut testen kann.
Guckst du hier: On-the-fly Regex-Tester: Regex-Lab
Und hier noch ein Tutorial dazu: [Artikel] Regex-Tutorial
Grüsse