有没有办法在正则表达式中执行动态替换?

Posted

技术标签:

【中文标题】有没有办法在正则表达式中执行动态替换?【英文标题】:Is there a way to perform dynamic replacing in a regular expression? 【发布时间】:2011-07-31 22:02:09 【问题描述】:

有没有办法在 C# 4.0 中使用匹配中包含的文本的函数进行正则表达式替换?

php中有这样的东西:

reg_replace('hello world yay','(?=')\s(?=')', randomfunction('$0'));

它为每个匹配项提供独立的结果,并在找到每个匹配项的地方替换它。

【问题讨论】:

【参考方案1】:

查看具有MatchEvaluator 重载的Regex.Replace 方法。 MatchEvaluator 是一种方法,您可以指定它来处理每个单独的匹配项并返回应该用作该匹配项的替换文本的内容。

比如这个……

猫跳过狗。 0:THE 1:CAT 跳过 2:THE 3:DOG。

...是以下内容的输出:

using System;
using System.Text.RegularExpressions;

namespace MatchEvaluatorTest

    class Program
    
        static void Main(string[] args)
        
            string text = "The cat jumped over the dog.";
            Console.WriteLine(text);
            Console.WriteLine(Transform(text));
        

        static string Transform(string text)
        
            int matchNumber = 0;

            return Regex.Replace(
                text,
                @"\b\w3\b",
                m => Replacement(m.Captures[0].Value, matchNumber++)
            );
        

        static string Replacement(string s, int i)
        
            return string.Format("0:1", i, s.ToUpper());
        
    

【讨论】:

以上是关于有没有办法在正则表达式中执行动态替换?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PySpark 中编写条件正则表达式替换?

正则表达式 - 增量替换

#转#VS2012 正则表达式 动态插入 动态替换 (查找和替换工具)

在正则表达式中转义特殊字符

BigQuery 正则表达式从字符串中删除/替换文本列表

PHP正则表达式 - 替换一个反向引用[重复]