0

嗨,我正在尝试通过遍历流读取器并检查每行是否以 /* 开头来从文本文件中删除注释

    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(@"*/")不能使用,因为这会删除它之前的代码。

谢谢。

4

3 回答 3

3

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

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

笔记

""如果包含..中的字符串,那将不起作用。/*您应该改用解析器!

于 2013-10-16T15:44:03.617 回答
2

正则表达式非常适合这一点。

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

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

var str = Regex.Replace(input, START + ".+?" + END, "",RegexOptions.Singleline);
于 2013-10-16T15:47:26.063 回答
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);
}
于 2013-10-16T15:45:57.407 回答