web-dev-qa-db-fra.com

Le meilleur moyen d'obtenir tous les chiffres d'une chaîne

Existe-t-il un meilleur moyen de prendre une chaîne telle que "(123) 455-2344" et d'obtenir "1234552344" plutôt que de procéder ainsi:

var matches = Regex.Matches(input, @"[0-9]+", RegexOptions.Compiled);

return String.Join(string.Empty, matches.Cast<Match>()
                                .Select(x => x.Value).ToArray());

Peut-être un motif de regex qui peut le faire en une seule correspondance? Je n'arrivais pas à en créer un pour y arriver.

20
Chris Marisic

Avez-vous besoin d'utiliser un regex?

return new String(input.Where(Char.IsDigit).ToArray());
71
Matt Hamilton

Avez-vous quelque chose contre Replace?

return Regex.Replace(input, @"[^0-9]+", "");
19
Alan Moore

Vous voudrez remplacer /\D/ (non numérique) par '' (chaîne vide)

Regex r = new Regex(@"\D");
string s = Regex.Replace("(123) 455-2344", r, "");

Ou plus succinctement:

string s = Regex.Replace("(123) 455-2344", @"\D",""); //return only numbers from string
8
maček

Il suffit de supprimer tous les non-chiffres:

var result = Regex.Replace(input, @"\D", "");
4
Konstantin Spirin

En Perl (vous pouvez l’adapter au C #), faites simplement

$str =~ s/[^0-9]//g; 

Je suppose que votre chaîne est dans $ str. L'idée de base est de remplacer tous les chiffres non numériques par '' (c'est-à-dire une chaîne vide)

0
Jasmeet