如何从Regex.Replace内部调用C#方法?

时间:2018-07-18 14:35:12

标签: c# regex

我希望能够发送这样的字符串:

  

这是* first *和* second *字。

并获取如下所示的字符串:

  

这是_______(stfri)和______(cnodes)一词。

但是以下代码不起作用,因为在Regex.Replace内部,它只发送一次$0,取回$0,然后将其用作变量以显示适当的单词,即返回

  

这是________(*第一*)和________(*第二*)单词。

我如何进入Regex循环并在每次迭代中调用我的ScrambleWord函数?

class Program
    {

        public static Random TheRandom;


        static void Main(string[] args)
        {
            TheRandom = new Random();

            string text = "This is the *first* and the *second* word.";
            string message = Regex.Replace(text, @"\*[a-z]+\*", @"________ (" + ScrambleWord("$0") + ")");

            Console.WriteLine(message);
            Console.ReadLine();
        }

        public static string ScrambleWord(string word)
        {
            string r = word;
            r = r.Replace("*", "");
            r = ShuffleLetters(r);
            return r;
        }

        public static string ShuffleLetters(string str)
        {
            char[] array = str.ToCharArray();
            int n = array.Length;
            while (n > 1)
            {
                n--;
                int k = TheRandom.Next(n + 1);
                var value = array[k];
                array[k] = array[n];
                array[n] = value;
            }
            return new string(array);
        }
    }

0 个答案:

没有答案