我正在尝试删除从文本文件中读取的块注释。 因此,应删除“/ ”和“ /”之间的所有文本。读者读取线条和问题所在的位置。 这就是我到目前为止所做的:
StringBuilder buildString = new StringBuilder();
using (StreamReader readFile = new StreamReader(filePath))
{
string line;
// reads the file line by line
while ((line = readFile.ReadLine()) != null)
{
//replaces the line if it has "--" in it.
line = Regex.Replace(line, @"--.*$", "");
if (line.StartsWith("/*"))
{
while ((line = readFile.ReadLine() ) != null)
{
//remove line untill the last line '*/'
if (line.StartsWith("*/"))
{
//Then Stop removing lines and go back to the main while.
}
}
}
buildString.Append(line + Environment.NewLine);
}
有任何建议或帮助吗? 感谢
答案 0 :(得分:1)
使用堆栈数据结构可以完成这项工作。但是,您必须逐个字符而不是一行读取。
"/"
,就不要预处理。"*"
。
"*/"
组合到来。"*/"
推送到输出时。如果"*/"
未到来或"*/"
没有匹配的"/*"
,则抛出错误。
答案 1 :(得分:0)
如何使用像
这样的正则表达式\ X2F \ X2A。* \ X2A \ X2F
https://www.google.com/search?q=q=regex+tutorial+in+c%23
\ x2F是/的十六进制,而\ x2A是十六进制的*正则表达式接受字符的十六进制代码,所以如果你使用多行正则表达式,这应该允许你选择块注释
编辑:一个示例函数
public string RemoveBlockComments(string InputString)
{
string strRegex = @"\/\*.*|.*(\n\r)*\*\/";
RegexOptions myRegexOptions = RegexOptions.Multiline;
Regex myRegex = new Regex(strRegex, myRegexOptions);
return myRegex.Replace(strTargetString, "");
}
答案 2 :(得分:0)
试试这个项目:
var Test = Regex.Replace(MyString, @"/\*([^*]|[\r\n]|(\*([^/]|[\r\n])))*\*/", "", RegexOptions.Singleline);