字符串中数字的正则表达式

时间:2011-10-19 19:37:09

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

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

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

为以下模式返回true

pattern = "[0-9]+"

pattern = "\\d+"

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

Q2)一旦我得到正确的模式以匹配数字,我如何提取字符串中的所有数字? 让我们说现在我只想以"int.int^int"格式获取字符串中的整数(例如,"11111.222^3333",在这种情况下,我想要提取字符串"11111",{{1 }和"222")。

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:3)

  1. 您指定它至少包含一个数字 ,而不是所有数字。您正在寻找表达式^\d+$。 ^和$分别表示字符串的开头和结尾。您可以阅读here

  2. 的更多信息
  3. 使用Regex.Split按任何 -digit字符串进行拆分。例如:

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

答案 1 :(得分:1)

它说它找到了它。

如果你想要检查整个表达式,那么:

^[0-9]+$

答案 2 :(得分:0)

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

我更喜欢命名的捕获组 - 它们将提供比

更清晰的访问方式