【问题标题】:Regular expression for numbers in string字符串中数字的正则表达式
【发布时间】:2011-10-19 19:37:09
【问题描述】:

输入字符串“134.45sdfsf”传递给下面的语句

System.Text.RegularExpressions.Regex.Match(input, pattern).Success;

为以下模式返回true

模式 = "[0-9]+"

模式 = "\\d+"

Q1) 我想,这到底是怎么回事!我只指定数字,而不是特殊字符或字母。那么我的模式有什么问题,如果我用上面的代码语句得到错误的返回值。

Q2) 一旦我得到正确的模式来匹配数字,我如何提取字符串中的所有数字? 假设现在我只想获取格式为"int.int^int" 的字符串中的整数(例如"11111.222^3333",在这种情况下,我想提取字符串"11111""222""3333")。

有什么想法吗?

谢谢

【问题讨论】:

  • 对于 q2,每个整数字符串都有一个匹配项
  • Java Matcher.matches() 方法按预期工作,但是 .Net Match() 函数返回与您的模式匹配的第一个 substringMatches() 函数返回“all”(虽然不是您可能期望的)与您的模式匹配的子字符串。您只需要使用所有答案中指定的^$

标签: c# regex visual-studio-2010 pattern-matching


【解决方案1】:
  1. 您指定它至少包含一个数字任何地方,而不是所有数字。您正在寻找表达式^\d+$。 ^ 和 $ 分别表示字符串的开始和结束。您可以阅读更多关于 here 的信息。

  2. 使用Regex.Split 以任何数字字符串分割。例如:

    string input = "123&$456";
    var isAllDigit = Regex.IsMatch(input, @"^\d+$");
    var numbers = Regex.Split(input, @"[^\d]+");
    

【讨论】:

    【解决方案2】:

    它说它找到了。

    如果你想检查整个表达式:

    ^[0-9]+$
    

    【讨论】:

      【解决方案3】:

      Q1) 两种模式都是正确的。

      Q2) 假设您正在寻找一个数字模式“5 位-点-3 位-^-4 位” - 这就是您要寻找的:

              var regex = new Regex("(?<first>[0-9]{5})\.(?<second>[0-9]{3})\^(?<third>[0-9]{4})");
              var match = regex.Match("11111.222^3333");
              Debug.Print(match.Groups["first"].ToString());
              Debug.Print(match.Groups["second"].ToString            
              Debug.Print(match.Groups["third"].ToString
      

      我更喜欢命名的捕获组——它们会提供比

      更清晰的访问方式

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-09
        相关资源
        最近更新 更多