REGEX Zeichenfolge gültige Zahl konvertieren, ohne Dezimalzahl, Zeichen optional
-
05-07-2019 - |
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.
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