匹配一个正则表达式并在目标字符串内反转匹配
本文关键字:目标 字符串 正则表达式 一个 | 更新日期: 2023-09-27 18:01:43
基于这个问题,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。
一个基本的算法是:
- 从字符串中提取匹配项。
"10-3-1"
- 用"-"字符将匹配分割成多个片段。 你现在有了一个元素列表。
- 将列表反转。
["1","3","10"]
- 用"-"字符连接数组中的元素。
"1-3-10"
- 用新加入的字符串替换匹配。
["10","3","1"]
虽然这个问题在这里得到了回答,但这里是一段稍微修改了正则表达式的代码:
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));
}