好吧,我有这段代码:
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)
替换放置(内容),但是需要正则表达式,我没有找到关于如何做这篇文章的好文章。
基本上,将*作为即将到来的价值,我想这样做:
string Change = val.Replace("puts *","System.Console.WriteLine(*)");
然后,如果我收到:
puts "Hello World";
我想得到:
System.Console.WriteLine("Hello World");
答案 0 :(得分:12)
您需要使用Regex.Replace
来使用capturing group捕获部分输入,并将捕获的匹配包含在输出中。例如:
Regex.Replace(
"puts 'foo'", // input
"puts (.*)", // .* means "any number of characters"
"System.Console.WriteLine($1)") // $1 stands for whatever (.*) matched
如果输入始终以分号结尾,则您希望将该分号移到WriteLine
个parens之外。一种方法是:
Regex.Replace(
"puts 'foo';", // input
"puts (.*);", // ; outside parens -- now it's not captured
"System.Console.WriteLine($1);") // manually adding the fixed ; at the end
如果您打算调整这些示例,最好先咨询技术参考;你可以找到一个非常好的here。
答案 1 :(得分:10)
您要做的是查看Grouping Expressions。试试以下
Regex.Replace(val, "puts (.*);", "System.Console.WriteLine(${1});");
请注意,您也可以为组命名,而不是使用其索引进行替换。你可以这样做:
Regex.Replace(val, "puts (?<str>.*);", "System.Console.WriteLine(${str});");