1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[C#] Regex gesucht ;-)

Dieses Thema im Forum ".NET Datenverwaltung" wurde erstellt von vfl_freak, 17. August 2015.

  1. vfl_freak

    vfl_freak Premium-User

    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
    Code (C++):
    1. var numbers = Regex.Split( input, @"\D+" );
    2. foreach( var value in numbers )
    3. {
    4.     // ...
    5.     var i = long.Parse( value );
    6.     // ...
    7. }
    Nur mit den double-Werte kämpfe ich noch
    Code (C++):
    1. 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. sheel

    sheel I love Asm Administrator

    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 (Text):
    1. foreach(var match in Regex.Matches(input, @"[0-9]+([,]|[.])[0-9]+"))
    2. {
    3.     // ...
    4.     var i = Double.Parse( match.Value );
    5.     // ...
    6. }
    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")
     
    vfl_freak gefällt das.
  3. vfl_freak

    vfl_freak Premium-User

    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
     
  4. Parantatatam

    Parantatatam mag Cookies & Kekse

    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. vfl_freak

    vfl_freak Premium-User

    Moinsen,

    jau, hat funktioniert !

    Danke und Gruß
    Klaus
     
Die Seite wird geladen...