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
Pas assez familier avec .NET pour le code exact. Néanmoins, deux approches seraient:
21389abc
), c’est le plus simple.1231a23v
) et que vous souhaitez conserver tous les chiffres, utilisez la regex [^\d]
pour remplacer les caractères non numériques.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é.
essayez cette option: Regex.Replace (str, "[^ 0-9 _]", "");
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
.
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());
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.
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;
}