Выражение регулярных выражений для разных форматов года c # - PullRequest
0 голосов
/ 04 октября 2018

Таким образом, у меня может быть 1 или более лет в строке, которая может быть в формате 2 цифры, то есть «18», 4 цифры, то есть «2018», полная строка даты, например, «12/04/2018», или их комбинация.Используя regex в c #, мне нужно перебрать эту строку, чтобы получить все значения, содержащие год, в любом из этих форматов и увеличить его на 1 год.

Например, эта строка

"Это строка, состоящая из двухзначного года - 15, четырехзначного года - 2015 и даты с 01.01.2015 по 02.03.2016"

должно стать

"Это строка, состоящая из двухзначного года - 16, четырехзначного года - 2016 и даты с 01.01.2016 по 02.02.2017"

Проблема с этим кодом связана с использованием даты, когда индекс выходит за пределы допустимого диапазона.Мне нужна логика, которая справится с этими 3 годами формата, пожалуйста.Если он содержит автономные действительные цифры 2 года, 4 цифры или дату (формат дд / мм / гггг), то критерии

    public string Increment(string text)
    {
        if (text == null) return null;
        var builder = new StringBuilder(text);

        var matches = Regex.Matches(text, @"\b(?:\d{4}|\d{2})\b");
        foreach (Match match in matches)
        {
            if (match.Success)
            {
                builder.Remove(match.Index, match.Length);
                builder.Insert(match.Index, int.Parse(match.Value) + 1);
            }
        }

        return builder.ToString();
    }

1 Ответ

0 голосов
/ 04 октября 2018

Вы можете использовать Regex.Replace с MatchEvaluator.Попробуйте этот код

var regex = new Regex("\\b(?<prefix>\\d{2}/\\d{2}/)?(?<year>\\d{2}|\\d{4})\\b");
var result = regex.Replace(text, match => $"{match.Groups["prefix"].Value}{int.Parse(match.Groups["year"].Value) + 1}");

Регулярное выражение содержит две группы: необязательный префикс и год.В MatchEvaluator группа "год" анализируется в int и увеличивается на 1

Демо

...