如何从文本阅读器中删除内嵌注释

时间:2013-10-16 15:35:39

标签: c# .net

您好我正在尝试通过迭代流式读取器并检查每行是否以/ *

开头来删除文本文件中的注释
    private void StripComments()
    {
        _list = new List<string>();
        using (_reader = new StreamReader(_path))
        {
            while ((_line = _reader.ReadLine()) != null)
            {
                var temp =_line.Trim();
                if (!temp.StartsWith(@"/*"))
                {
                    _list.Add(temp);
                }
            }            
        }
    }

我需要使用以下格式删除评论/* I AM A COMMENT */我认为该文件只有整行注释,但仔细检查后,有些注释位于某些行的末尾。无法使用.endswith(@"*/"),因为这会删除它之前的代码。

感谢。

3 个答案:

答案 0 :(得分:3)

如果你对正则表达式感到满意

string pattern="(?s)/[*].*?[*]/";
var output=Regex.Replace(File.ReadAllText(path),pattern,"");
  • .将匹配除换行符之外的任何字符。
  • (?s)切换单行模式,其中.也会匹配换行符。
  • .*会匹配0到多个字符*是量词
  • .*?会懒洋洋地匹配,即它会尽可能地匹配

注意

如果""中的字符串包含/*,则无效。您应该使用解析器!

答案 1 :(得分:2)

正则表达式非常适合这种情况。

string START = Regex.Escape("/*");
string END = Regex.Escape("*/");

string input = @"aaa/* bcd  
                de */ f";

var str = Regex.Replace(input, START + ".+?" + END, "",RegexOptions.Singleline);

答案 2 :(得分:0)

List<string> _list = new List<string>();
Regex r = new Regex("/[*]");
string temp = @"sadf/*slkdj*/";
if (temp.StartsWith(@"/*")) { }
else if (temp.EndsWith(@"*/") && temp.Contains(@"/*"))
{
    string pre = temp.Substring(0, r.Match(temp).Index);
    _list.Add(pre);
}
else
{
    _list.Add(temp);
}