2010-03-31 34 views
5

Hay muchos números como 200 20.5 329.2 ... en un archivo. Ahora, necesito reemplazar cada número A con A * 0.8. ¿Hay algún método simple para reemplazar el valor original por otro basado en el valor original?Expresión regular para reemplazar los números en un archivo

Best Regards,

+0

Sólo 'scanf' un número, se multiplica por 0,8 , luego 'printf' out (conviértalos en equivalentes de C#). – kennytm

+0

¿Qué tipo de archivo es? –

Respuesta

8

prueba este:

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" 

Editar: Agregado el signo más/menos como un carácter opcional en la parte delantera. Para evitar la captura de los 5 en 3-5 como negativos, se puede utilizar en lugar de ((?<=\s)[+-])?[+-]

+0

+1 ¡Bastante impresionante! – systempuntoout

+0

Tengo que amar a los delegados en las expresiones regulares ... Deja algunas preguntas sobre ".57" o similar, pero OP debería ser capaz de resolverlo ... Todavía tengo curiosidad sobre si los números son o no lo ÚNICO en el archivo – LorenVS

+0

+1 por cierto ... límite de caracteres ... – LorenVS

0

El uso de lambda y un poco mejor manejo de casos como 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()); 
Cuestiones relacionadas