查找字符串中的所有数字

时间:2011-07-07 20:47:20

标签: c# regex string numbers find

我的应用程序的一部分有一个区域,用户将文本输入到textBox控件中。他们将在textBox中输入文本和数字。当用户按下一个按钮时,textBox将其文本输出到一个字符串中,查找字符串中的所有数字,将它们乘以1.14,然后将键入的文本吐出到一个非常小的textBlock中。

基本上,我想要做的是找到字符串中的所有数字,将它们乘以1.14,然后将它们插回到字符串中。

起初,我认为这可能是一个简单的问题:只需Bing the title,看看会出现什么。

但经过两页现在紫色的链接,我开始认为我不能用我自己的,非常吝啬的Regex知识来解决这个问题。

但是,我确实找到了一系列有用的链接:

请注意:这些文章中的一些接近于做我想做的事情,从字符串中提取数字,但没有一个找到字符串中的所有数字

示例: 用户在textBox中输入以下字符串:“鸡肉,冰淇淋,567,奶酪!还有140和1337。”

然后该程序会将其吐入textBlock:“鸡肉,冰淇淋,646.38,奶酪!还有159.6和1524.18。”

2 个答案:

答案 0 :(得分:4)

您可以使用与数字匹配的正则表达式,并使用Regex.Replace方法。我不确定您在“数字”一词中包含哪些内容,但这会替换所有非负整数,例如42123456

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

如果你需要“数字”的其他定义,例如科学记数法,你需要一个更精细的正则表达式,但原理是相同的。

答案 1 :(得分:2)

从样本here

中自由采用

请注意您的区域选项(因为您正在解析和序列化浮点数)

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