Comment puis-je supprimer les chaînes et obtenir uniquement des nombres entiers?
J'ai une ficelle (01 - ABCDEFG)
je n'ai besoin que de (01)
input = Regex.Replace(input, "[^0-9]+", string.Empty);
Il y a quatre façons différentes de le faire (bien probablement plus mais j'ai choisi celles-ci).
# 1: Regex de Bala R
string output = Regex.Replace(input, "[^0-9]+", string.Empty);
# 2: regex de Donut et agent-j
string output = Regex.Match(input, @"\d+").Value;
# 3: Linq
string output = new string(input.ToCharArray().Where(c => char.IsDigit(c)).ToArray());
# 4: Sous-chaîne , pour que cela fonctionne, le tiret doit être dans la chaîne entre les chiffres et le texte.
string output = input.Substring(0, input.IndexOf("-")).Replace(" ", "");
Avec ces entrées:
string input1 = "01 - ABCDEFG";
string input2 = "01 - ABCDEFG123";
Les résultats pour 1 et 2 seraient:
output1 = "01";
output2 = "01123";
Pour 3 et 4, les résultats seraient:
output1 = "01";
output2 = "01";
Si le résultat attendu consiste à obtenir tous les chiffres de la chaîne, utilisez # 1 ou # 2, mais si le résultat attendu consiste à obtenir uniquement les chiffres avant le tiret, utilisez # 3 ou # 4.
Avec une chaîne aussi courte que les n ° 1 et n ° 2, la vitesse est à peu près la même chose que pour les n ° 3 et 4, mais s'il y a beaucoup d'itérations ou que les chaînes sont quatre fois plus longues Le n ° 4 est plus rapide que le n ° 3.
Remarque: Si les parenthèses sont incluses dans les chaînes # 4, vous devez modifier ceci, mais cela ne le ralentira pas beaucoup:
string output = input.Substring(0, input.IndexOf("-")).Replace(" ", "").Replace("(", "");
essaye ça:
Convert.ToInt32(string.Join(null, System.Text.RegularExpressions.Regex.Split(s, "[^\\d]")))
il retourne la valeur entière 1.
Obtenir tous les numéros de la chaîne
string str = "01567438absdg34590";
string result = "";
result = Regex.Replace(str, @"[^\d]", "");
Console.WriteLine(result);
Console.Read();
Sortie: 0156743834590
string snum = System.Text.RegularExpression.Regex.Match(s, "\d+").Value;
int num;
if (!int.TryParse(snum, out num))
throw new Exception();
Vous devriez utiliser des expressions régulières - elles constituent un moyen assez puissant pour faire correspondre des chaînes de texte à certains modèles, et c'est un excellent scénario pour les utiliser.
Le modèle "\d+
" correspond à une séquence d'un ou plusieurs chiffres. Une méthode simple qui utilise ce modèle pour extraire all nombres d’une chaîne est la suivante:
public static List<int> ExtractInts(string input)
{
return Regex.Matches(input, @"\d+")
.Cast<Match>()
.Select(x => Convert.ToInt32(x.Value))
.ToList();
}
Pour que vous puissiez l'utiliser comme ceci:
List<int> result = ExtractInts("( 01 - ABCDEFG )");
Pour des informations plus détaillées sur les expressions régulières, voir cette page (MSDN) ou cette page (aide-mémoire utile) .
Découvrez ce billet de blog: http://weblogs.asp.net/sushilasb/archive/2006/08/03/How-to-extract-numbers-from-string.aspx
Un programme simple qui extrait le nombre de la chaîne en utilisant une expression régulière.
class Program
{
static void Main(string[] args)
{
Console.WriteLine(ExtractNumbers("( 01 - ABCDEFG )")); // 01
Console.ReadLine();
}
static string ExtractNumbers(string expr)
{
return string.Join(null, System.Text.RegularExpressions.Regex.Split(expr, "[^\\d]"));
}
}
J'espère que cela t'aides!
Response.Write(Convert.ToDecimal(string.Join(null, System.Text.RegularExpressions.Regex.Split(TextBox1.Text, "[^\\d .]"))));
Ceci concerne les nombres int
et decimal
.
Essaye ça:
string XYZ = string.Join(null, System.Text.RegularExpressions.Regex.Split(“XYZ 77”, “[^\d]”));
Vous pouvez également utiliser cette méthode pour obtenir votre réponse appropriée.
string sentence = "10 cats, 20 dogs, 40 fish and 1 programmer";
string[] digits= Regex.Split(sentence, @"\D+");
foreach (string value in digits)
{
int number;
if (int.TryParse(value, out number))
{
Debug.Log(value);
}
}