72 votes

Comment supprimer tous les caractères alphabétiques d'une chaîne?

J'ai une chaîne contenant des caractères alphabétiques, par exemple:

  1. 254,69 mètres
  2. 26,56 cm
  3. 23,36 pouces
  4. 100.85 pieds

Je souhaite supprimer tous les caractères alphabétiques (unités) des chaînes mentionnées ci-dessus afin de pouvoir appeler la méthode double.Parse()

143voto

Pranay Rana Points 69934

Cela devrait fonctionner:

 // add directive at the top 
using System.Text.RegularExpressions;

string numberOnly = Regex.Replace(s, "[^0-9.]", "")

25voto

froeschli Points 1524

Vous devriez pouvoir résoudre ce problème en utilisant Regex. Ajoutez la référence suivante à votre projet:

 using System.Text.RegularExpressions;

après cela, vous pouvez utiliser les éléments suivants:

 string value = Regex.Replace(<yourString>, "[A-Za-z ]", "");
double parsedValue = double.Parse(value);

En supposant que vous n'ayez que des caractères alphabétiques et un espace comme unités.

12voto

Vlad S. Points 91

Utilisation de LINQ:

 using System.Linq;

string input ="57.20000 KG ";
string output = new string(input.Where(c=>(Char.IsDigit(c)||c=='.'||c==',')).ToArray());

3voto

Greg Points 153

Les réponses Regex et LINQ de Vlad couvrent bien la solution. Et ce sont deux bonnes options.

J'ai eu un problème similaire, mais je voulais aussi uniquement supprimer explicitement les lettres, et ne pas supprimer d'espace blanc ou etc., avec cette variante.

Je voulais aussi qu'il soit utilisable comme ci-dessous. Toutes les autres solutions pourraient être conditionnées de la même manière.

 public static string StripAlpha(this string self)
{
    return new string( self.Where(c => !Char.IsLetter(c)).ToArray() );
}

public static string StripNonNumeric(this string self)
{
    // Use Vlad's LINQ or the Regex Example
    return new string(self.Where(c=>(Char.IsDigit(c)||c=='.'||c==',')).ToArray()) ;  // See Vlad's

}

Cela serait alors utilisé comme:

 var newString = someString.StripAlpha();
var newString2 = someString.StripNonNumeric();

3voto

steffen bolding Points 45

Salut une autre solution est:

 // add directive at the top 
using System.Text.RegularExpressions;
string s = "24,99";
string numberOnly = Regex.Replace(s, "[^0-9,-]+", "")

Cette solution ne supprimera pas le point par exemple la question de user1804084:

cela supprime le point pour moi, par exemple 24,99 somechracter -> 2499

Cependant, il peut toujours être converti en un double où l'addition et la soustraction fonctionnent normalement.

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