2010-03-31 17 views
5

Ci sono molti numeri come 200 20.5 329.2 ... in un file. Ora, ho bisogno di sostituire ogni numero A con A * 0.8. Esiste un metodo semplice per sostituire il valore originale con un altro basato sul valore originale?Espressione regolare per sostituire i numeri in un file

migliori saluti,

+0

Basta 'scanf' un numero, moltiplicare per 0,8 , quindi 'printf' it out (convertirli in equivalenti C#). – kennytm

+0

Che tipo di file è? –

risposta

8

provare questo:

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: Aggiunto il segno più/meno come un carattere facoltativo di fronte. Per evitare di prendere il 5 in 3-5 come negativo, è possibile utilizzare ((?<=\s)[+-])? invece di [+-]

+0

+1 Abbastanza impressionante! – systempuntoout

+0

Devo amare i delegati in regex ... Lascia alcune domande su ".57" o simili, ma OP dovrebbe essere in grado di capirlo ... Sono ancora curioso di sapere se i numeri sono l'UNICA cosa nel file – LorenVS

+0

+1 btw ... limite di carica ... – LorenVS

0

Utilizzando lambda e leggermente migliore gestione dei casi come 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()); 
Problemi correlati