【问题标题】:Regex cut number in a string c#字符串c#中的正则表达式剪切数字
【发布时间】:2014-04-14 14:28:58
【问题描述】:

我有一个如下的字符串 2 - 5 现在我想用 Regex C# 获得数字 5(我是 Regex 的新手),你能给我一个想法吗?谢谢

【问题讨论】:

  • 为什么不使用 string.Split('-') 然后从数组中获取第二个元素?
  • 为什么需要正则表达式?

标签: c# regex string split


【解决方案1】:

你可以简单地使用String.Split方法:

int number = int.Parse("2 - 5".Split('-', ' ').Last());

如果最后一个数字后没有空格,这将起作用。如果是这种情况,那么:

 int number = int.Parse("2 - 5  ".Split('-', ' ')
              .Last(x => x.Any() && x.All(char.IsDigit)));

【讨论】:

    【解决方案2】:

    很简单如下:

    '\s-\s(\d)'

    并提取第一个匹配组

    【讨论】:

      【解决方案3】:

      @SShashank 有权,但我想我会提供一些代码,因为你提到你是 Regex 的新手:

      string s = "something 2-5 another";
      Regex rx = new Regex(@"-(\d)");
      if (rx.IsMatch(s))
      {
          Match m = rx.Match(s);
          System.Console.WriteLine("First match: " + m.Groups[1].Value);
      }
      

      Groups[0] 是整个匹配,Groups[1] 是第一个匹配的组(括号中的东西)。

      【讨论】:

      • 谢谢@James Jensen,当我必须在 URL 上使用字符串时,你能否建议我这个想法,例如 www.the-world-is-awesome.com 我想使用 is- URL 很棒,我尝试使用这种模式:@“http://www.the-world-(?[AZ-.]+).com”,但它警告我模式中的错误。跨度>
      • @user3520221:如果要逐字匹配,则需要转义模式中的破折号和其他元字符。此外,您需要确保命名匹配也具有正确的模式。例如,http://www\.the\-world\-(?<host>.+)\.com 将匹配您在 .NET Regex 对象中的示例并返回“is-awesome”。
      【解决方案4】:

      如果你真的想使用正则表达式,你可以这样做:

      string text = "2 - 5";
      
      string found = Regex.Match(text, @"\d+", RegexOptions.RightToLeft).Value;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 2016-07-08
        • 2013-07-24
        • 1970-01-01
        • 2011-02-25
        • 1970-01-01
        • 2012-01-22
        相关资源
        最近更新 更多