C# 查找字符串中的所有数字

C# 查找字符串中的所有数字,c#,regex,string,numbers,find,C#,Regex,String,Numbers,Find,我的部分应用程序有一个区域,用户可以在其中向textBox控件输入文本。他们将在文本框中输入文本和数字。当用户按下按钮时,文本框将文本输出为字符串,找到字符串中的所有数字,将它们乘以1.14,然后将键入的文本吐出到一个非常小的文本块中 基本上,我要做的是找到字符串中的所有数字,将它们乘以1.14,然后将它们插入到字符串中 起初,我认为这可能是一个简单的问题:看看会发生什么 但是在两页的紫色链接之后,我开始认为我不能用自己对正则表达式非常肤浅的知识来解决这个问题 然而,我确实发现了大量有用的链接:

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

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

起初,我认为这可能是一个简单的问题:看看会发生什么

但是在两页的紫色链接之后,我开始认为我不能用自己对正则表达式非常肤浅的知识来解决这个问题

然而,我确实发现了大量有用的链接:

  • 来自DotNetPerls
  • 在斯尼普尔
  • 关于MSDN
  • 关于堆栈溢出
  • 来自关联内容
  • 关于MSDN
  • 在Java2s.com上
请注意:这些文章中有几篇通过从字符串中提取数字接近我想要做的事情,但是没有一篇找到字符串中的所有数字

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


然后,该程序会将其吐入文本块:“鸡肉、冰淇淋、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的正则表达式,但原理是相同的。

从示例中自由采用

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


数字。。。还是数字?有很大的区别。数字,不包括写为“一”和“二”的数字,但不包括写为“1”和“2”的数字。那么
-.040
呢?还是
1/3
?还是
0x8f
?还是
2^8
?还是
1e7
?这些都是数字。哇!似乎工作得很好。。。但是,在我未来的编辑1秒之前,你错过了一个符号。这比Guffa的答案有什么好处吗?正则表达式稍微复杂一些(但并不完美)。否则,不会(除了提供更多的文档链接和为了清晰起见稍微详细一点之外,实际上是编译和运行-hehe:)
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