如何正则表达式替换不在评论中的内容?

时间:2011-06-27 19:45:51

标签: c# regex comments

如何使用正则表达式替换不是注释的代码?

..PATTERN.. PATTERN // .. PATTERN ..

..ANOTHER.. ANOTHER // .. PATTERN ..

评论可以是///* */

正则表达式找到评论是:

/\*(.|[\r\n])*?\*/|(//.*)

2 个答案:

答案 0 :(得分:0)

只需做一个简单的双态扫描仪(REGULAR_TOKEN,COMMENT_TOKEN,......)

然后为每个REGULAR_TOKEN做一个简单的替换,并保留comment_tokens。我再次推荐Boost Spirit /

如果您更多地指定了目标/问题,我可能会举一个例子

答案 1 :(得分:0)

通过使用负面的lookbehind(但仍然容易出现“.... // .....”形式的文字字符串问题,您可以轻松地对单行注释执行此操作):

string target = "replace // don't replace";
var output = Regex.Replace(target, "(?<!//.*)replace", "new string");
Console.WriteLine(output); //  new string // don't replace

也许这可以用于多线:

string target = 
    @"replace;
/*
* don't replace
*/
replace;
    ";

var output = Regex.Replace(target, @"(?<!./\*\s*)replace(?!\s*\*/)", "new string", RegexOptions.Singleline);

Console.WriteLine(output); 

输出:

新字符串;   / *   *不要更换   * /   新字符串;