c# - 如何在 C# 的 RegEx 替换操作中使用计算值?

标签 c# regex

我正在寻找一种方法,通过 c# regex.replace 函数在替换表达式中使用匹配组的长度。

也就是说,我可以替换什么???在以下示例中使用以获得如下所示的所需输出?

示例:

val = Regex.Replace("xxx", @"(?<exes>x{1,6})", "${exes} - ???");

期望的输出

X - 3

注意:这是一个非常人为/简化的例子来证明这个问题。我意识到对于这个例子,正则表达式不是这样做的理想方式。请相信我,答案在现实世界中的应用是更复杂问题的一部分,需要在此处使用 RegEx 替换。

最佳答案

如果您使用的是 C# 3,您可以简单地从 lambda 表达式创建一个 MatchEvaluator:

string val = Regex.Replace(
   "xxx",
   @"(?<exes>x{1,6})",
   new MatchEvaluator(
      m => m.Groups["exes"].Value[0] + " - " + m.Groups["exes"].Value.Length.ToString()
   )
);

在 C# 2 中,您可以使用委托(delegate):

string val = Regex.Replace(
   "xxx",
   @"(?<exes>x{1,6})",
   new MatchEvaluator(
      delegate(Match m) {
         return m.Groups["exes"].Value[0] + " - " + m.Groups["exes"].Value.Length.ToString();
      }
   )
);

关于c# - 如何在 C# 的 RegEx 替换操作中使用计算值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1256762/

相关文章:

c# - 在表单之间传递数据

c# - 编译错误CS0305 使用泛型类型List

javascript - 使用 reduce 检查数组是否包含与字符串匹配的正则表达式

css - 从选择器中获取 id 的正则表达式?

javascript - 解析文本并使用正则表达式获取两个值

Javascript 从字符串中提取正则表达式

c# - MVC Razor for 循环

c# - 在 C# 中修剪部分文本文件的代码

c# - 使用 Ajax 不显眼地渲染部分 View

python - 如果我用re.findall 怎么注册才能不分开点