匹配一个正则表达式并在目标字符串内反转匹配

本文关键字:目标 字符串 正则表达式 一个 | 更新日期: 2023-09-27 18:01:43

基于这个问题,Regex 'd+(?:-'d+)+将匹配这个10-3-15-0

的例子:

This is 10-3-1 my string

在执行匹配和反转之后,我希望它是这样的:

This is 1-3-10 my string

请注意,10-3-1应该变成1-3-10,而不是正常的字符串反转,否则会产生1-3-01。

匹配一个正则表达式并在目标字符串内反转匹配

一个基本的算法是:

  1. 从字符串中提取匹配项。"10-3-1"
  2. 用"-"字符将匹配分割成多个片段。
  3. 你现在有了一个元素列表。["10","3","1"]
  4. 将列表反转。["1","3","10"]
  5. 用"-"字符连接数组中的元素。"1-3-10"
  6. 用新加入的字符串替换匹配。

虽然这个问题在这里得到了回答,但这里是一段稍微修改了正则表达式的代码:

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));
}