2010-03-31 12 views
5

Istnieje wiele numerów takich jak 200 20.5 329.2 ... w pliku. Teraz potrzebuję zastąpić każdą liczbę A przez A * 0,8. Czy istnieje jakaś prosta metoda zamiany oryginalnej wartości na inną w oparciu o oryginalną wartość?Wyrażenie regularne zastępujące liczby w pliku

Pozdrawiam,

+0

Wystarczy 'scanf' numer, należy pomnożyć przez 0,8 , następnie "printf" (konwertuj je na odpowiedniki C#). – kennytm

+0

Jaki to jest plik? –

Odpowiedz

8

spróbować tego:

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: Dodany plus/minus jako opcjonalny znak z przodu. Aby uniknąć łapanie 5 w 3-5 jako negatywne, można użyć ((?<=\s)[+-])? zamiast [+-]

+0

+1 Całkiem imponujące! – systempuntoout

+0

Muszę uwielbiać delegatów w regexie ... Pozostawia kilka pytań o ".57" lub podobnych, ale OP powinien być w stanie to rozgryźć ... Wciąż jestem ciekawy, czy liczby są TYLKO plik – LorenVS

+0

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

0

Korzystanie lambda i nieco lepsze prowadzenie spraw jak 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()); 
Powiązane problemy