用于仅匹配浮点数的正则表达式

时间:2014-12-10 07:02:36

标签: c# regex

嗨我需要一个Regex Expression来从右到左只提取浮点数

示例字符串

  

每股权益收益() face value of 2每26,675.10   1,252.56

我当前的Regex

带有Rex选项的

(\+|-)?[0-9][0-9]*(\,[0-9]*)?(\.[0-9]*)? - 从右到左 但是

当前输出

1,252.56 
1,675.10 
26
2

但我不希望在262

上匹配

请帮帮我

2 个答案:

答案 0 :(得分:3)

也许这样的事情会有所帮助

<强>正则表达式

/[-+]?[0-9,\.]*([,\.])[0-9]*/g

示例输入

  

收入-34 5 b4 pe8r blah4 t3st + - (in)1,252.56 face   -12234,23423.342 of 1,675.10 1,252.56

<强>匹配

1,252.56
-12234,23423.342
1,675.10
1,252.56

解释

[-+]? 匹配以下列表中的单个字符

  • 量词:?一个之间,尽可能多次,根据需要回馈 [greedy]
  • -+列表-+中的单个字符

[0-9,\.]* 匹配以下列表中的单个字符

  • 量词:*无限之间,尽可能多次,根据需要回馈 [greedy]
  • 0-9 09
  • 之间的单个字符
  • ,文字,
  • \.字面匹配字符.

第一个捕获小组 ([,\.])

  • [,\.] 匹配下面列表中的单个字符
    • ,文字,
    • \.字面匹配字符.

[0-9]* 匹配以下列表中的单个字符

  • 量词:*无限之间,尽可能多次,根据需要回馈 [greedy]
  • 0-9 09
  • 之间的单个字符

g修饰符:全局。所有比赛(首场比赛都没有回归)

答案 1 :(得分:0)

虽然这是一个Regex问题,但这也是C#

下面是一个如何对输出进行更多控制的示例

它还具有文化特定性,只能获取带小数位的数字,并且没有误报

方式

private List<double> GetNumbers(string input)
{
   // declare result
   var resultList = new List<double>();

   // if input is empty return empty results
   if (string.IsNullOrEmpty(input))
   {
      return resultList;
   }

   // Split input in to words, exclude empty entries
   var words = input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

   // set your desirted culture
   var culture = CultureInfo.CreateSpecificCulture("en-GB");

   // Refine words into a list that represents potential numbers
   // must have decimal place, must not start or end with decimal place
   var refinedList = words.Where(x => x.Contains(".") && !x.StartsWith(".") && !x.EndsWith("."));
   foreach (var word in refinedList)
   {
      double value;
      // parse words using designated culture, and the Number option of double.TryParse
      if (double.TryParse(word, NumberStyles.Number, culture, out value))
      {
         resultList.Add(value);
      }
   }
   return resultList;
}

<强>用法

var testString = "Earning -34 5 b4 , . 234. 234, ,345 45.345 $234234 234.3453.345 $23423.2342 +234 -23423 pe8r blah4 t3st + - (in) 1,252.56 face -12234,23423.342 of 1,675.10 1,252.56";
var results = GetNumbers(testString);
foreach (var item in results)
{
   Debug.WriteLine("{0}", item);
}

<强>输出

45.345
1252.56
-1223423423.342
1675.1
1252.56

附加说明

您可以详细了解double.TryParse及其选项here

您可以详细了解CultureInfo类here