Frage

Ich will alles zu entfernen, nachdem einschließlich dem Dezimalsystem und alles nicht-numerische außer dem Bindestrich, wenn es das erste Zeichen ist. Bisher habe ich dieses: /[^0-9^-]|[^\.]+$/. Beachten Sie, wie ich blockieren Striche aus wird mit ^- entfernt, denn irgendwie will ich nur die Striche entfernen, die nicht das erste Zeichen sind (nicht das Zeichen). Irgendeine Hilfe? Danke.

Ich will es einfach entfernen

  • Alle nicht 0-9 Zeichen, mit Ausnahme der ersten Zeichen, wenn es ein Bindestrich (negatives Vorzeichen)
  • Alles nach und einschließlich dem Komma

Bsp .: 10js-_67.09090FD => 1067
-10a.h96 => -10

EDIT: Es macht nichts, ich war dies die falsche Art und Weise nähern und versuchen, die Zeichen zu entsprechen, die nicht gehören, und ich merkte, ich sollte nicht einen regulären Ausdruck für diese verwenden. obwohl Vielen Dank für Ihre Antworten, habe ich gelernt, ein wenig über regex und vielleicht jemand anderes mit einem ähnlichen Problem wird dies finden.

War es hilfreich?

Lösung

Versuchen Sie folgendes:

Regex numbers = new Regex(@"^(-?\d*)[^0-9]*(\d*)\.", 
    RegexOptions.ECMAScript | RegexOptions.Multiline);
foreach (Match number in numbers.Matches("10js-_67.09090FD"))
{
    Console.WriteLine(
        Int32.Parse(
            number.Groups[1].Value + 
            number.Groups[2].Value));
}

Oder diese:

Console.WriteLine(
    Int32.Parse(
        Regex.Replace(
            "10js-_67.09090FD", 
            @"^(-?\d*)[^0-9]*(\d*)\.([\s\S]*?)$", "$1$2", 
            RegexOptions.ECMAScript | RegexOptions.Multiline)));

Oder diese:

var re = /^(-?\d*)[^0-9]*(\d*)\.([\s\S]*?)$/
alert(parseInt("10js-_67.09090FD".replace(re, "$1$2"),10));

Andere Tipps

Das wäre /^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/\1\2/ (Verwendung für sed wie Sie mir nicht sagen, was Sprache ar Sie verwenden).

/^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/
// '^'          ==>l From the Start
// '(..)'       ==>l Group 1
//     '-?'     ==>l An optiona '-'
//     '[0-9]+' ==>l Some numbers
// '[^0-9\.]*'  ==>l Anything but numbers and dot
// '(..)'       ==>l Group 2 (So this is the number after the dot)
//     '[0-9]*' ==>l Some numbers
// '.*$'        ==>l The rest

Dann druckt Nur Gruppe 1 und Gruppe 2 (/ \ 1 \ 2 /).

Tests:

$:~/Desktop$ echo "10js-_67.09090FD" | sed -r "s/^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/\1\2/"
1067
$:~/Desktop$ echo "-10a.h96" | sed -r "s/^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/\1\2/"
-10

Hope, das hilft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top