2010-11-03 7 views
0

Je veux extraire le numéro de chaîne qui pourrait contenir des caractères non numériquesConvert.ToDouble chaîne non numérique

Je pense Convert.ToDouble(Regex.Replace(data[i].ToString(), @"ANSWER HERE", ""));

Exemple chaîne: "wd123.321dw" Vous le voulez 123,321 sur de ça.

également pour les négatifs: "we-123.321ew" pour -123,321

Des indices?

Répondre

4

Quelque chose comme ça?

 string n = "wd123.321dw"; 
     var regNumber = new Regex(@"\-?\d+\.?\d+"); 

     var match = regNumber.Match(n); 
     if (match.Success) 
     { 
      double d; 
      if (Double.TryParse(match.Value, out d)) 
      { 
       Console.WriteLine("The number is: {0}",d); 
      } 
     } 
+0

dois dire que je suis époustouflé par les réponses. N'ayez pas stackOverflown pendant un moment, mais grimaçant maintenant. Merci! – Nick

1
double d_val = Convert.ToDouble(Regex.Replace(data[i].ToString(), @"[^0-9\.\-]", "")); 
+0

ne fonctionnait pas pour les négatifs. Je sais que ce n'était pas dans ma question au moment où vous avez répondu, les réponses viennent de SO avant que je puisse penser directement !! – Nick

+0

@Nick - Thats ok, j'ai mis à jour pour inclure le littéral '-'. Ce n'est évidemment pas aussi bien que la solution de driis, car il ne correspondra qu'à des formats numériques valides. – SwDevMan81

+0

va vérifier les performances - si la vôtre est nettement plus rapide, il se peut que ce soit la méthode que j'utilise! – Nick

0

Essayez cela comme l'expression régulière:

"0+" + Regex.Escape(CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator) + "0+" 

Cela utilisera le séparateur décimal de vos paramètres régionaux actuels à partir de Windows.

+1

0+ correspond à un ou plusieurs zéros. –

Questions connexes