Regex replacing inside of

本文关键字:of inside replacing Regex | 更新日期: 2023-09-27 18:03:57

我有这样的代码:

        StreamReader sr = new StreamReader(@"main.cl", true);
        String str = sr.ReadToEnd();
        Regex r = new Regex(@"&");
        string[] line = r.Split(str);
        foreach (string val in line)
        {
            string Change = val.Replace("puts","System.Console.WriteLine()");
            Console.Write(Change);
        }

正如你所看到的,我正试图用Console.WriteLine(content)代替put (content),但这需要正则表达式,我没有找到一篇关于如何做到这一点的好文章。

基本上,将*作为即将到来的值,我想这样做:

string Change = val.Replace("puts *","System.Console.WriteLine(*)");

那么,如果我收到:

puts "Hello World";

我想要得到:

System.Console.WriteLine("Hello World");

Regex replacing inside of

您需要使用Regex.Replace通过使用捕获组来捕获部分输入,并将捕获的匹配包含到输出中。例子:

Regex.Replace(
    "puts 'foo'",                    // input
    "puts (.*)",                     // .* means "any number of characters"
    "System.Console.WriteLine($1)")  // $1 stands for whatever (.*) matched

如果输入总是以分号结束,则需要将该分号移到WriteLine父级之外。一种方法是:

Regex.Replace(
    "puts 'foo';",                   // input
    "puts (.*);",                    // ; outside parens -- now it's not captured
    "System.Console.WriteLine($1);") // manually adding the fixed ; at the end

如果你打算改编这些例子,最好先咨询一下技术参考资料;

您要做的是查看Grouping Expressions。试试下面的

Regex.Replace(val, "puts (.*);", "System.Console.WriteLine(${1});");

注意,您还可以命名您的组,而不是使用它们的索引进行替换。你可以这样做:

Regex.Replace(val, "puts (?<str>.*);", "System.Console.WriteLine(${str});");