2010-03-31 20 views
5

Es gibt viele Zahlen wie 200 20,5 329,2 ... in einer Datei. Jetzt muss ich jede Zahl A durch A * 0.8 ersetzen. Gibt es eine einfache Methode, um den ursprünglichen Wert durch einen anderen zu ersetzen, der auf dem ursprünglichen Wert basiert?Regulärer Ausdruck, um die Zahlen in einer Datei zu ersetzen

Mit besten Grüßen,

+0

Nur 'scanf' eine Zahl, multipliziert mit 0,8 , dann 'printf' es aus (wandle diese in C# -Äquivalente um). – kennytm

+0

Welche Art von Datei ist das? –

Antwort

8

Versuchen Sie dieses:

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: Added die Plus/Minus-Zeichen als optionales Zeichen vor. Um zu vermeiden, die 5 in 3-5 als negativ zu kontrollieren, könnten Sie ((?<=\s)[+-])? statt [+-]

+0

+1 Ziemlich beeindruckend! – systempuntoout

+0

Muss Delegaten in Regexs lieben ... Hinterlässt einige Fragen über ".57" oder ähnliches, aber OP sollte in der Lage sein, es herauszufinden ... Ich bin immer noch neugierig, ob die Zahlen das EINZIGE Ding im sind Datei – LorenVS

+0

+1 btw ... Char Limit ... – LorenVS

0

Mit Lambda und etwas bessere Handhabung von Fällen verwenden wie 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()); 
Verwandte Themen