我的应用程序的一部分有一个区域,用户将文本输入到textBox控件中。他们将在textBox中输入文本和数字。当用户按下一个按钮时,textBox将其文本输出到一个字符串中,查找字符串中的所有数字,将它们乘以1.14,然后将键入的文本吐出到一个非常小的textBlock中。
基本上,我想要做的是找到字符串中的所有数字,将它们乘以1.14,然后将它们插回到字符串中。
起初,我认为这可能是一个简单的问题:只需Bing the title,看看会出现什么。
但经过两页现在紫色的链接,我开始认为我不能用我自己的,非常吝啬的Regex知识来解决这个问题。
但是,我确实找到了一系列有用的链接:
请注意:这些文章中的一些接近于做我想做的事情,从字符串中提取数字,但没有一个找到字符串中的所有数字
示例: 用户在textBox中输入以下字符串:“鸡肉,冰淇淋,567,奶酪!还有140和1337。”
然后该程序会将其吐入textBlock:“鸡肉,冰淇淋,646.38,奶酪!还有159.6和1524.18。”
答案 0 :(得分:4)
您可以使用与数字匹配的正则表达式,并使用Regex.Replace
方法。我不确定您在“数字”一词中包含哪些内容,但这会替换所有非负整数,例如42
和123456
:
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