Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅匹配浮点数的正则表达式_C#_Regex - Fatal编程技术网

C# 仅匹配浮点数的正则表达式

C# 仅匹配浮点数的正则表达式,c#,regex,C#,Regex,嗨,我需要一个正则表达式,从右到左只提取浮点数 示例字符串 每股权益收益(在中)每股面值2 1675.10 1252.56 我当前的Regex (\+\124;-)?[0-9][0-9]*(\,[0-9]*)?(\.[0-9]*)?具有从右到左的Rex选项 但是 电流输出为 1,252.56 1,675.10 26 2 但是,我不想在26或2 请帮帮我,也许这样会有帮助 Regex /[-+]?[0-9,\.]*([,\.])[0-9]*/g 示例输入 45.345 1252.56 -12

嗨,我需要一个正则表达式,从右到左只提取浮点数

示例字符串

每股权益收益(在<代码>中)每股面值<代码>2 1675.10 1252.56

我当前的
Regex

(\+\124;-)?[0-9][0-9]*(\,[0-9]*)?(\.[0-9]*)?
具有从右到左的Rex选项 但是

电流输出为

1,252.56 
1,675.10 
26
2
但是,我不想在
26
2


请帮帮我,也许这样会有帮助

Regex

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

示例输入

45.345
1252.56
-1223423423.342
1675.1
1252.56
收入-34 5 b4 pe8r blah4 t3st+-(英寸)1252.56面 -1223423423.342/1675.10 1252.56

匹配

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

解释

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

  • 量词:
    时间之间,尽可能多次,根据需要回馈[贪婪]
  • -+
    列表中的单个字符
[0-9,\.]*
匹配下表中的单个字符

  • 量词:
    *
    介于零次无限次之间,尽可能多次,根据需要回馈[贪婪]
  • 0-9
    介于
    0
    9
    之间的单个字符
  • 文字字符
  • \。
    按字面意思匹配字符
第一个捕获组
([,\.])

  • [,\.]
    匹配下表中的单个字符
    • 文字字符
    • \。
      按字面意思匹配字符
[0-9]*
匹配下表中的单个字符

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

g
修改器:全局。所有比赛(第一场比赛时不要返回)

也许这样会有帮助

Regex

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

示例输入

45.345
1252.56
-1223423423.342
1675.1
1252.56
收入-34 5 b4 pe8r blah4 t3st+-(英寸)1252.56面 -1223423423.342/1675.10 1252.56

匹配

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

解释

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

  • 量词:
    时间之间,尽可能多次,根据需要回馈[贪婪]
  • -+
    列表中的单个字符
[0-9,\.]*
匹配下表中的单个字符

  • 量词:
    *
    介于零次无限次之间,尽可能多次,根据需要回馈[贪婪]
  • 0-9
    介于
    0
    9
    之间的单个字符
  • 文字字符
  • \。
    按字面意思匹配字符
第一个捕获组
([,\.])

  • [,\.]
    匹配下表中的单个字符
    • 文字字符
    • \。
      按字面意思匹配字符
[0-9]*
匹配下表中的单个字符

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

g
修改器:全局。所有匹配项(第一次匹配时不返回)

尽管这是一个
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;
}
输出

45.345
1252.56
-1223423423.342
1675.1
1252.56
附加注释

1,252.56
-12234,23423.342
1,675.10
1,252.56
您可以了解有关double.TryParse及其选项的更多信息


您可以了解有关CultureInfo类的更多信息,尽管这是一个
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;
}
输出

45.345
1252.56
-1223423423.342
1675.1
1252.56
附加注释

1,252.56
-12234,23423.342
1,675.10
1,252.56
您可以了解有关double.TryParse及其选项的更多信息


您可以了解有关CultureInfo类的更多信息

是否需要使用regex?我认为极小的c#程序将是最简单的解决方案。你选择数字的规则是什么?不知道最后两个数字?或者如果数字位于字符串旁边,则不获取该数字?(+|-)?[0-9][0-9](\,[0-9])?(\)[0-9]*是否需要使用正则表达式?我认为极小的c#程序将是最简单的解决方案。你选择数字的规则是什么?不知道最后两个数字?或者,如果它是在一个字符串的旁边?(0+9[09](\,[09])?(\[9])<代码> 1223423423.342 < /代码>不是一个我认为有效的浮点值。公平的注释,虽然它对解决原始帖子有很长的路要,并且确实显示了一些下落<代码> 1。