Count regex replaces (C#)

前端 未结 3 2020
醉话见心
醉话见心 2020-11-30 10:55

Is there a way to count the number of replacements a Regex.Replace call makes?

E.g. for Regex.Replace(\"aaa\", \"a\", \"b\"); I want to get the number 3

3条回答
  •  [愿得一人]
    2020-11-30 11:40

    Thanks to both Chevex and Guffa. I started looking for a better way to get the results and found that there is a Result method on the Match class that does the substitution. That's the missing piece of the jigsaw. Example code below:

    using System.Text.RegularExpressions;
    
    namespace regexrep
    {
        class Program
        {
            static int Main(string[] args)
            {
                string fileText = System.IO.File.ReadAllText(args[0]);
                int matchCount = 0;
                string newText = Regex.Replace(fileText, args[1],
                    (match) =>
                    {
                        matchCount++;
                        return match.Result(args[2]);
                    });
                System.IO.File.WriteAllText(args[0], newText);
                return matchCount;
            }
        }
    }
    

    With a file test.txt containing aaa, the command line regexrep test.txt "(?aa?)" ${test}b will set %errorlevel% to 2 and change the text to aabab.

提交回复
热议问题