((\+[0-9][0-9]?[0-9]? ?)?)((((([0-9][0-9][0-9][0-9]?)(-| )?)|(\([0-9][0-9][0-9][0-9]?\)))?[0-9][0-9][0-9][0-9]?[0-9]?[0-9]?[0-9]?[0-9]?)|(0?13[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]))本人写了一个这样的字符串, 根据空格分割,逗号分割,小于3位的不取。 但是这个最多只能取32位 本人想在这个基础上,把所有的连续数字都取出来 不分开表示求牛人解答。

解决方案 »

  1.   

    [0-9]就是所有数字了。就可以用\d表示了。第一步缩减为
    ((\+\d\d?\d? ?)?)(((((\d\d\d\d?)(-| )?)|(\(\d\d\d\d?\)))?\d\d\d\d?\d?\d?\d?\d?)|(0?13\d\d\d\d\d\d\d\d\d))
      

  2.   

    还没看你想干嘛。再次简化你的正则为
    ((\+\d{1,3} ?)?)(((((\d{3,4})(-| )?)|(\(\d{3,4}\)))?\d{3,8})|(0?13\d{9}))
      

  3.   


    string  str="45465464654646 46546654464446456464664464646465464646465 45rewer";
    Regex reg=new Regex(@"\d{3,}");
    MatchCollection mc=reg.Matches(str);
    foreach( Match m in mc )
    {
    Console.WriteLine(m.Value+m.Index);
    }
    Console.Read();
      

  4.   

    string str = "123 12,asdf23344;22233654";
    Regex reg = new Regex(@"\d{3,32}");
    Match mat = reg.Match(str);
    while (mat.Success)
    {
        Console.WriteLine(mat.Value);
        mat = reg.Match(str, mat.Index + mat.Length);
    }