Question

Je souhaite supprimer tout ce qui suit et après la décimale, ainsi que tout ce qui n'est pas numérique, sauf le trait d'union s'il s'agit du premier caractère. Jusqu'à présent, j'ai ceci: / [^ 0-9 ^ -] | [^ \.] + $ / . Remarquez comment je bloque la suppression des tirets avec ^ - , car je ne souhaite que supprimer les tirets qui ne sont pas le premier caractère (pas le signe). De l'aide? Merci.

Je veux juste qu'il supprime

  • Tous les caractères autres que 0 à 9, à l'exception du premier caractère s'il s'agit d'un tiret (signe négatif)
  • Tout ce qui suit et incluant le point décimal

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

EDIT: Peu importe, j’abordais cette approche de la mauvaise façon, essayant de faire correspondre les caractères qui n’appartiennent pas, et j’ai réalisé que je ne devrais pas utiliser une regex pour cela. Merci pour vos réponses, j’en ai appris un peu sur la regex et peut-être que quelqu'un qui a un problème similaire va le trouver.

Était-ce utile?

La solution

Essayez ceci:

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));
}

Ou celui-ci:

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

Ou celui-ci:

<*>

Autres conseils

Ce serait / ^ (-? [0-9] +) [^ 0-9 \.] * ([0-9] *). * $ / \ 1 \ 2 / (à utiliser car vous ne me dites pas quelle langue utilisez-vous).

/^(-?[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
// '.*

Ensuite, n'imprimez que les groupes 1 et 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

J'espère que cela vous aidera

==>l The rest

Ensuite, n'imprimez que les groupes 1 et 2 (/ \ 1 \ 2 /).

Tests:

<*>

J'espère que cela vous aidera

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top