Поиск всех чисел в строке

Часть моего приложения имеет область, в которой пользователи вводят текст в элемент управления textBox. Они будут вводить оба текста AND в текстовое поле. Когда пользователь нажимает кнопку, textBox выводит свой текст в строку, находит все числа в строке, умножает их на 1.14 и выплескивает напечатанный текст в довольно маленький текстовый блок.

В принципе, я хочу найти все числа в строке , умножить их на 1.14 и вставить их обратно в строку.

Сначала я подумал, что это может быть простой вопрос: просто Bing название и посмотреть, что происходит.

Но после двух страниц фиолетовых ссылок я начинаю думать, что не могу решить этот вопрос своими собственными, очень скудными знаниями о Regex.

Тем не менее, я нашел сердечную коллекцию полезных ссылок:

  • Эта статья от DotNetPerls
  • Этот fragment кода в Snipplr
  • Этот вопрос на MSDN
  • Этот ответ на StackOverflow
  • Эта статья от AssociatedContent
  • Этот вопрос на MSDN
  • Эта статья о Java2s.com

Обратите внимание: некоторые из этих статей приближаются к тому, что я хочу сделать, выбирая числа из строк, но ни один из них не находит все числа в строке .

Пример: пользователь вводит следующую строку в текстовое поле: «Курица, мороженое, 567, сыр! Также 140 и 1337».

Затем программа выплюнула бы это в textBlock: «Курица, мороженое, 646,38, сыр! Также 159,6 и 1524,18».

Вы можете использовать регулярное выражение, которое соответствует номерам, и использовать метод Regex.Replace . Я не уверен, что вы включаете в термин «числа», но это заменит все неотрицательные целые числа, например, например, 42 и 123456 :

 str = Regex.Replace( str, @"\d+", m => (Double.Parse(m.Groups[0].Value) * 1.14).ToString() ); 

Если вам нужно другое определение «чисел», например научное обозначение, вам нужно более регулярное выражение elaboarete, но принцип тот же.

Свободно принят из образца здесь

Остерегайтесь ваших региональных параметров (поскольку вы анализируете и сериализуете числа с плавающей запятой)

 using System; using System.Text.RegularExpressions; class MyClass { static void Main(string[] args) { var input = "a 1.4 b 10"; Regex r = new Regex(@"[+-]?\d[\d\.]*"); // can be improved Console.WriteLine(input); Console.WriteLine(r.Replace(input, new MatchEvaluator(ReplaceCC))); } public static string ReplaceCC(Match m) { return (Double.Parse(m.Value) * 1.14).ToString(); } } [mono] ~ @ mono ./t.exe a 1.4 b 10 a 1.596 b 11.4