2010-03-31 5 views
5

Il y a beaucoup de nombres comme 200 20.5 329.2 ... dans un fichier. Maintenant, j'ai besoin de remplacer chaque nombre A par A * 0.8. Existe-t-il une méthode simple pour remplacer la valeur d'origine par une autre basée sur la valeur d'origine?Expression régulière pour remplacer les nombres dans un fichier

Cordialement,

+0

Juste 'scanf' un certain nombre, il faut multiplier par 0,8 , puis 'printf' out (convertissez-les en équivalents C#). – kennytm

+0

De quel type de fichier s'agit-il? –

Répondre

8

Essayez celui-ci:

String s = "This is the number 2.5. And this is 7"; 
s = Regex.Replace(s, @"[+-]?\d+(\.\d*)?", m => {return (Double.Parse(m.ToString())*0.8).ToString();}); 
// s contains "This is the number 2. And this is 5.6" 

Edit: Ajouté le signe plus/moins comme un caractère facultatif à l'avant. Pour éviter d'attraper 5 dans 3-5 négatif, vous pouvez utiliser ((?<=\s)[+-])? au lieu de [+-]

+0

+1 Assez impressionnant! – systempuntoout

+0

Doit aimer les délégués dans regex ... Laisse quelques questions sur ".57" ou similaire, mais OP devrait être en mesure de comprendre ... Je suis toujours curieux de savoir si les chiffres sont la seule chose dans le fichier – LorenVS

+0

+1 btw ... char limit ... – LorenVS

0

utilisant lambda et la manipulation un peu mieux des cas comme The value is .5. Next sentence:

var s = "This is the number 2.5. And this is 7, .5, 5. Yes."; 
var result = Regex.Replace(s, @"[+-]?(\d*\.)?\d+", m => (double.Parse(m.Value) * 0.8).ToString()); 
Questions connexes