开发者

Is there a way to perform dynamic replacing in a regular expression?

Is there a way to do a regex replace in C# 4.0 with a function of the text contained in the match?

In php there is something like this:

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

and it gives independent results for each match and replaces it where each match is fou开发者_开发问答nd.


See the Regex.Replace methods that have a MatchEvaluator overload. The MatchEvaluator is a method you can specify to handle each individual match and return what should be used as the replacement text for that match.

For example, this...

The cat jumped over the dog.
0:THE 1:CAT jumped over 2:THE 3:DOG.

...is the output from the following:

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\w{3}\b",
                m => Replacement(m.Captures[0].Value, matchNumber++)
            );
        }

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜