web-dev-qa-db-fra.com

Extraire des nombres d'une chaîne pour créer une chaîne composée uniquement de chiffres

On m'a donné des données mal formatées et je dois extraire les chiffres des chaînes. Je ne sais pas quelle est la meilleure façon de faire cela. Les nombres peuvent être n'importe quelle longueur.

string a = "557222]]>";
string b = "5100870<br>";

aucune idée de ce que je peux faire alors je vais obtenir ceci:

a = "557222"
b = "5100870"

Merci

La solution est pour c # désolé. Edité la question pour avoir cette balise

10
kevp

Pas assez familier avec .NET pour le code exact. Néanmoins, deux approches seraient:

  • Jetez-le comme un entier. Si les caractères non numériques sont à la fin (c.-à-d. 21389abc), c’est le plus simple.
  • Si vous avez mélangé des caractères non numériques (à savoir 1231a23v) et que vous souhaitez conserver tous les chiffres, utilisez la regex [^\d] pour remplacer les caractères non numériques.
8
Jason McCreary

Vous pourriez écrire une méthode simple pour extraire tous les caractères non numériques, bien que cela ne gère pas les données à virgule flottante:

public string ExtractNumber(string original)
{
     return new string(original.Where(c => Char.IsDigit(c)).ToArray());
}

Cela extrait simplement les "chiffres" - vous pouvez également utiliser Char.IsNumber au lieu de Char.IsDigit , en fonction du résultat souhaité.

31
Reed Copsey

essayez cette option: Regex.Replace (str, "[^ 0-9 _]", "");

12
Milind Raut

Vous pouvez utiliser une expression régulière simple:

var numericPart = Regex.Match( a, "\\d+" ).Value;

Si vous avez besoin que ce soit une valeur numérique réelle, vous pouvez alors utiliser int.Parse ou int.TryParse.

7
Ethan Brown

Vous pouvez utiliser LINQ. Le code ci-dessous filtre la chaîne en un IEnumerable avec uniquement des chiffres, puis la convertit en un caractère []. Le constructeur de chaîne peut ensuite convertir le caractère char [] en une chaîne:

string a = "557222]]>";
string b = "5100870<br>";

a = new string(a.Where(x => char.IsDigit(x)).ToArray());
b = new string(b.Where(x => char.IsDigit(x)).ToArray());
5
soroxis

La question ne dit pas explicitement que vous voulez juste les caractères de 0 à 9 mais il ne serait pas exagéré de croire que cela est vrai d'après votre exemple et vos commentaires. Donc, voici le code qui fait ça.

        string digitsOnly = String.Empty;
        foreach (char c in s)
        {
            // Do not use IsDigit as it will include more than the characters 0 through to 9
            if (c >= '0' && c <= '9') digitsOnly += c;
        }

Pourquoi vous ne souhaitez pas utiliser Char.IsDigit () - Les nombres incluent des caractères tels que des fractions, des indices, des indices supérieurs, des chiffres romains, des numérateurs monétaires, des nombres encerclés et des chiffres spécifiques au script.

3
Atters

Essaye ça

string number = Regex.Match("12345<br>", @"\d+").Value;

Cela renverra le premier groupe de chiffres. Exemple: pour l'entrée "a 123 b 456 c", il retournera "123".

Voici la version qui a fonctionné pour mon cas

    public static string ExtractNumbers(this string source)
    {
        if (String.IsNullOrWhiteSpace(source))
            return string.Empty;
        var number = Regex.Match(source, @"\d+");
        if (number != null)
            return number.Value;
        else
            return string.Empty;
    }
0
Michael Bahig