您好我正在尝试通过迭代流式读取器并检查每行是否以/ *
开头来删除文本文件中的注释 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(@"*/")
,因为这会删除它之前的代码。
感谢。
答案 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);
}