Поиск всех чисел в строке - PullRequest
4 голосов
/ 08 июля 2011

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

По сути, что яхочу сделать это найти все числа в строке , умножить их на 1,14 и вставить обратно в строку.

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

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 08 июля 2011

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

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

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

2 голосов
/ 08 июля 2011

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

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...