【问题标题】:Getting number from a string in C#从 C# 中的字符串中获取数字
【发布时间】:2012-03-20 14:33:18
【问题描述】:

我正在抓取一些类似这样的网站内容 - “Company Stock Rs. 7100”。

现在,我想要从这个字符串中提取数值。我尝试了拆分,但我的正则表达式出现了问题。

请告诉我如何获取此值。

【问题讨论】:

  • 数字总是在字符串的末尾吗?
  • 数字总是在最后吗?文本会一直是“公司股票”吗?
  • 是的,数字总是在最后
  • @RobLevine。它有什么区别?他不想要只最后的数字。
  • "但是我的正则表达式出了点问题。"在问了 117 个问题并获得了近 2500 个代表之后,您会认为您现在已经知道了:发布一些代码来向我们展示您的尝试。

标签: c# .net regex


【解决方案1】:

用途:

var result = Regex.Match(input, @"\d+").Value;

如果你只想找到字符串中最后一个“实体”的数字,你应该使用这个正则表达式:

\d+$

如果要匹配字符串中的最后一个数字,可以使用:

\d+(?!\D*\d)

【讨论】:

    【解决方案2】:
    int val = int.Parse(Regex.Match(input, @"\d+", RegexOptions.RightToLeft).Value);
    

    【讨论】:

      【解决方案3】:

      我一直很喜欢LINQ:

      var theNumber = theString.Where(x => char.IsNumber(x));    
      

      虽然Regex 听起来像是原生选择...

      【讨论】:

      • @KirillPolishchuk。你说得对,我刚刚删除了它... =) 谢谢
      • 像1 a 2这样的字符串呢?
      • @KirillPolishchuk。你会得到12。我写了Regex 是本机选择。我刚刚用LINQ 展示了另一种方式。 (我会使用Regex,如果这是你的意思......)
      • 但这会返回 IEnumerable() 但不是字符串,不是吗?
      • @Flowerking。我想你可以写new string(theString) 把它作为一个字符串来获取。
      【解决方案4】:

      此代码将返回字符串末尾的整数。在字符串中的其他位置有数字的情况下,这将比正则表达式更好地工作。

          public int getLastInt(string line)
          {
              int offset = line.Length;
              for (int i = line.Length - 1; i >= 0; i--)
              {
                  char c = line[i];
                  if (char.IsDigit(c))
                  {
                      offset--;
                  }
                  else
                  {
                      if (offset == line.Length)
                      {
                          // No int at the end
                          return -1;
                      }
                      return int.Parse(line.Substring(offset));
                  }
              }
              return int.Parse(line.Substring(offset));
          }
      

      【讨论】:

      • "如果字符串中的其他地方有数字,这将比正则表达式更好。" - 凭什么?可以很容易地使正则表达式只匹配字符串末尾的数字。
      【解决方案5】:

      如果你的数字总是在最后一个空格之后并且你的字符串总是以这个数字结尾,你可以这样得到:

      str.Substring(str.LastIndexOf(" ") + 1)
      

      【讨论】:

        【解决方案6】:

        这是我的答案......它使用 C# 将数字与字符串分开......

            static void Main(string[] args)
            {
                String details = "XSD34AB67";
                string numeric = "";
                string nonnumeric = "";
                char[] mychar = details.ToCharArray();
                foreach (char ch in mychar)
                {
                    if (char.IsDigit(ch))
                    {
        
                        numeric = numeric + ch.ToString();
                    }
                    else
                    {
                        nonnumeric = nonnumeric + ch.ToString();
                    }
                }
        
                int i = Convert.ToInt32(numeric);
                Console.WriteLine(numeric);
                Console.WriteLine(nonnumeric);
                Console.ReadLine();
        
        
        
            }
        }
        

        }

        【讨论】:

          【解决方案7】:

          您可以使用\d+ 匹配第一次出现的数字:

          string num = Regex.Match(input, @"\d+").Value;
          

          【讨论】:

            猜你喜欢
            • 2012-01-26
            • 2011-05-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多