Совпадение с регулярным выражением и обратное совпадение в целевой строке - PullRequest
1 голос
/ 08 июля 2011

На основании этот вопрос Regex \d+(?:-\d+)+ будет соответствовать этим 10-3-1 и 5-0.

Пример:

This is 10-3-1 my string

После выполнения сопоставления и изменения я хочу, чтобы это было так:

This is 1-3-10 my string

Обратите внимание, что 10-3-1 должно стать 1-3-10, а не обычной обратной строкой, что приведет к 1-3-01.

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Основной алгоритм будет выглядеть следующим образом:

  1. Извлечь совпадение из строки."10-3-1"
  2. Разделить совпадение на сегменты символом «-».
  3. Теперь у вас есть список элементов.["10","3","1"]
  4. Перевернуть список.["1","3","10"]
  5. Соедините элементы массива с символом "-"."1-3-10"
  6. Заменить совпадение новой строкой.
1 голос
/ 08 июля 2011

Хотя на вопрос был дан ответ, это фрагмент кода со слегка измененным регулярным выражением:

var text = "This is 10-3-1 and 5-2.";
var re = new Regex(@"((?<first>\d+)(?:-(?<parts>\d+))+)");
foreach (Match match in re.Matches(text))
{
    var reverseSequence = match
                            .Groups["first"]
                            .Captures.Cast<Capture>()
                            .Concat(match.Groups["parts"].Captures.Cast<Capture>())
                            .Select(x => x.Value)
                            .Reverse()
                            .ToArray();
    text = text.Replace(match.Value, string.Join("-", reverseSequence));
}
...