172 votes

Suppression des caractères non numériques dans une chaîne de caractères

Je cherche à éliminer les caractères non numériques d'une chaîne de caractères en ASP.NET C#, c'est-à-dire à supprimer les caractères non numériques. 40,595 p.a. se transformerait en 40595 .

Gracias

335voto

Fredrik Mörk Points 85694

Il y a de nombreuses façons de procéder, mais celle-ci devrait faire l'affaire (je ne sais pas comment elle se comporte avec des chaînes de grande taille) :

private static string GetNumbers(string input)
{
    return new string(input.Where(c => char.IsDigit(c)).ToArray());
}

91voto

Jonas Elfström Points 16453

On dirait que ça correspond bien à une expression régulière.

var s = "40,595 p.a.";
var stripped = Regex.Replace(s, "[^0-9]", "");

"[^0-9]" peut être remplacé par @"\D" mais j'aime la lisibilité de [^0-9] .

10voto

Ercan Ayan Points 161

Une méthode d'extension sera une meilleure approche :

public static string GetNumbers(this string text)
    {
        text = text ?? string.Empty;
        return new string(text.Where(p => char.IsDigit(p)).ToArray());
    }

7voto

kernowcode Points 51

Une autre option...

private static string RemoveNonNumberDigitsAndCharacters(string text)
{
    var numericChars = "0123456789,.".ToCharArray();
    return new String(text.Where(c => numericChars.Any(n => n == c)).ToArray());
}

6voto

Onkelborg Points 2554

Utilisez soit une expression régulière qui ne capture que les 0-9 et rejette le reste. Une expression régulière est une opération qui va coûter cher la première fois. Ou faites quelque chose comme ceci :

var sb = new StringBuilder();
var goodChars = "0123456789".ToCharArray();
var input = "40,595";
foreach(var c in input)
{
  if(goodChars.IndexOf(c) >= 0)
    sb.Append(c);
}
var output = sb.ToString();

Quelque chose comme ça je pense, je n'ai pas compilé cependant

LINQ est, comme l'a dit Fredrik, également une option.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X