Регулярное выражение, которое проверяет количество цифр - PullRequest
0 голосов
/ 17 марта 2019

У меня есть строка, которая содержит что-то вроде этого number: -7-972/516/57.15.Выражение должно возвращать количество цифр и фильтровать по первому числу.В результате я хочу видеть: 79725165715.Я написал это выражение ^(\D*)+7+(\D*(?:\d\D*){10})$, но в этом выражении возникла проблема «Катастрофический возврат» (зависает при выполнении) с длинными строками, такими как: bt.rfznascvd@rcs.ru,e.zovtrnko@lkn.ru

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Вы просто должны использовать \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();
        }
    }
}
0 голосов
/ 17 марта 2019

Я пишу новый, и это работает: \D*7(\d\D*){10}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...