2010-03-29 56 views
3

我有一个C#字符串对象,它包含一个通用方法的代码,前面有一些标准的C-Style多行注释。删除C样式多行注释

我想我可以使用System.Text.RegularExpressions删除评论块,但我似乎能够得到它的工作。

我想:

code = Regex.Replace(code,@"/\*.*?\*/",""); 

我可以在正确的方向指出?

+0

+1问这个问题很巧妙地 – Anonymoose 2010-05-12 09:06:05

回答

2

使用RegexOptions.Multiline选项参数。

string output = Regex.Replace(input, pattern, string.Empty, RegexOptions.Multiline); 

string input = @"this is some stuff right here 
    /* blah blah blah 
    blah blah blah 
    blah blah blah */ and this is more stuff 
    right here."; 

string pattern = @"/[*][\w\d\s]+[*]/"; 

string output = Regex.Replace(input, pattern, string.Empty, RegexOptions.Multiline); 
Console.WriteLine(output); 
0

你需要在星星之前逃离你的反斜杠。

string str = "hi /* hello */ hi"; 
str = Regex.Replace(str, "/\\*.*?\\*/", " "); 
//str == "hi hi" 
+0

我使用了逐字运算符@,没有它,我得到编译错误 – Olaseni 2010-03-29 13:53:36

+0

@Olaseni:查看它编译和工作的代码示例。 – 2010-03-29 13:56:48

3

您正在使用反斜杠逃脱正则表达式*,但你还需要逃脱在C#字符串的反斜线完整的示例。

因此,@"/\*.*?\*/""/\\*.*?\\*/"

此外,评论应该有一个空格,而不是空字符串替换,除非你确信你的输入。

0

你可以试试:

/\/\*.*?\*\// 

因为有一些/正则表达式,它能够更好地使用不同的分隔符为:

#/\*.*?\*/#