查找以“+”或“ - ”开头的字符串中的十进制数字

时间:2013-10-22 20:46:06

标签: c# asp.net regex

我想从远程服务收到的字符串中获取一些十进制数字。

我的问题是我只想在前缀为“+”或“ - ”的字符串中使用小数。

这是我目前的解决方案:

string text = "+123.23 foo 456.34 bar -789.56";
List<string> decimals = Regex.Split(text, @"[^0-9\.]+").Where(
                             c => c != "." && c.Trim() != string.Empty).ToList();

foreach (var str in decimals)
{
    Console.WriteLine(str); 
}

// Output:
//           
// 123.23 
// 456.34
// 789.56
//
// Desired output:
//
// 123.23
// -789.56

由于我不熟悉正则表达式,我希望得到一些更合适的模式的帮助。

2 个答案:

答案 0 :(得分:2)

我从Split非数字切换到Match数字。这会得到你想要的结果:

string text = "+123.23 foo 456.34 bar -789.56";
List<string> decimals = Regex.Matches(text, @"[+\-][0-9]+(\.[0-9]+)?")
                          .Cast<Match>().Select(m => m.Value).ToList();

foreach (var str in decimals)
{
    Console.WriteLine(decimal.Parse(str));
}

答案 1 :(得分:2)

尝试(\+|\-)[0-9\.]+

string strRegex = @"(\+|\-)[0-9\.]+";
Regex myRegex = new Regex(strRegex);
string strTargetString = @"+123.23 foo 456.34 bar -789.56";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {

  }
}