[C#] Regex gesucht ;-)

#1
Moin,

für eine kleine C#-Übung versuche ich im einem beliebigen String alle vorhandenen long- und double-Werte rausfinden.

Beispiel: string "abcde12345_xyz_666_mmm_11,75_zxy_45.42_äöü"
Soll die Zahlen 12345, 666, 11,75 und 45.42 liefern
Das mit den long-Werten klappt mittels REGEX auch prima. Ich splitte einfachnach nicht-digtalen Zeichen und konvertiere dann die Einträge nach long
C++:
var numbers = Regex.Split( input, @"\D+" );
foreach( var value in numbers )
{
    // ...
    var i = long.Parse( value );
    // ...
}
Nur mit den double-Werte kämpfe ich noch
C++:
var numbers = Regex.Split( input, @"[0-9]+([,]|[.])[0-9]+" );
Hiermit werden zwar die double-Werte in input sauber gefunden, aber da ja damit gesplittet wird, bräuchte ich ja eigentlich die Negation von "[0-9]+([,]|[.])[0-9]+".

Nur, wie negiere ich denn diesen Ausdruck? Habe zwar diverses im Web gefunden, aber keinen funktionierenden Hinweis auf die Negation eines ganzen Ausdruckes! Oder geht das was ich da vorhabe nicht ??

Danke und Gruß
Klaus
 
#2
Hi

Wenn es mit den von .NET unterstützten Regex umkehrbar ist, ist es auf jeden Fall umständlich.
Deutlich einfacher wäre, nicht anzugeben zu müssen, woran aufgetrennt werden soll,
sondern, was eigentlich gesucht ist:
Code:
foreach(var match in Regex.Matches(input, @"[0-9]+([,]|[.])[0-9]+"))
{
    // ...
    var i = Double.Parse( match.Value );
    // ...
}
Was bei deinen Codes noch zu berücksichtigen ist, das nicht alle per Regex gefundenen Sachen
auch parsebar sind (auch bei den Nicht-Kommazahlen). zB. zu lange Zahlen, die nicht in Long passen.
Die Parsemethoden erzeugen dann vermutlich Exceptions (hab nicht nachgeschaut, aber sehr wahrscheinlich)

(Und \d ist "digit"=Ziffer, nicht "digital")
 
#3
Moin sheel,

ach ja, das klingt logisch ... manchmal sieht man den Wald vor lauter Bäumen nicht o_O

Die Exception fange ich schon ab, hatte ich hier nur wegen der Übersichlichkeit nicht gepostet.
Beim "digital" waren dann wohl die Finger flinker als das Hirn :)

Werde es morgen früh mal testen!
Danke und Gruß
Klaus
 

Parantatatam

mag Cookies & Kekse
#4
Am Ende leiten sich sowohl "digit" als auch "digital" vom lateinischen "digitus" ab, also dem Finger, mit dem man zählt oder etwas anzeigt ;)
 
#5
Moinsen,

jau, hat funktioniert !

Danke und Gruß
Klaus