Форматировать строки с помощью Regex - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть несколько очень «грязных» строк, которые звучат так:

  • CR 722-2018
  • CR7222018
  • -CR 7222018

Мне нужно, чтобы они были преобразованы во что-то вроде этого:

CP-41-CR-0000722-2018

Все три из вышеперечисленных выглядели бы так:

Я был Любопытно, если бы был способ сделать это sh с помощью RegEx? Формат будет выглядеть примерно так:

CP-41-CR-(\n{7})-(\n{4}).

Это можно сделать с помощью RegEx?

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Да, это можно сделать с помощью RegEx следующим образом:

var patt = @".*?(CR)\s?(\d\d\d)\-?(\d\d\d\d)";

Regex.Matches(txtIn.Text, patt, RegexOptions.Multiline | RegexOptions.IgnoreCase).Cast<Match>()
    .ToList().ForEach(m => 
    Console.WriteLine($"CP-41-{m.Groups[1].Value}0000{m.Groups[2].Value}-{m.Groups[3].Value}"));

Где txtIn.Text - это ввод грязных строк.

Здесь - это тест.

Также шаблон .*?(CR)\s?(\d{3})\-?(\d{4}) будет делать .

1 голос
/ 26 февраля 2020

Попробуйте следующее:

            string[] inputs = {
                                  "CR 722-2018",
                                  "CR7222018",
                                  "-CR 7222018"
                              };
            foreach (string input in inputs)
            {
                string digits = string.Join("", input.Where(x => char.IsDigit(x)));
                string output = string.Format("CP-41-CR-000{0}-{1}", digits.Substring(0, 3), digits.Substring(3));
                Console.WriteLine(output);
            }
            Console.ReadLine();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...