检查数字位数的正则表达式

时间:2019-03-17 05:53:56

标签: regex

我有一个字符串,其中包含类似$( "h1" ).focus(function() { alert( "Handler for .focus() called." ); }); 的内容 。表达式必须返回数字位数,并按第一个数字过滤。结果,我想查看:number: -7-972/516/57.15 。我写了这个表达式79725165715,但是那个表达式遇到了问题“灾难性的回溯”(执行时冻结),带有长字符串,例如:^(\D*)+7+(\D*(?:\d\D*){10})$

2 个答案:

答案 0 :(得分:0)

我写了一个新的,并且有效:\D*7(\d\D*){10}

答案 1 :(得分:0)

您只需要使用\d。使用Matches将为您提供所考虑行中所有匹配的模式。其中Count可以为您提供比赛次数。为了将它们连成字符串,我创建了一个小的扩展方法。 为了测试您的正则表达式,我可以建议regexlib

namespace CSharpTest
{
    using System.Text;
    using System.Text.RegularExpressions;

    public static class Program
    {
        static void Main(string[] args)
        {
            string input = @"number: -7-972/516/57.15";

            var regex = new Regex(@"\d");

            var matches = regex.Matches(input);

            var countOfNumbers = matches.Count;
            var number = matches.ToNumber();
        }

        public static string ToNumber(this MatchCollection matches)
        {
            var result = new StringBuilder();

            foreach (Match match in matches)
                result.Append(match.Value);

            return result.ToString();
        }
    }
}