删除" / *"之间的文字和" * /" (块评论)

时间:2012-05-16 11:30:23

标签: c# wpf streamreader

我正在尝试删除从文本文件中读取的块注释。 因此,应删除“/ ”和“ /”之间的所有文本。读者读取线条和问题所在的位置。 这就是我到目前为止所做的:

        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);
            }

有任何建议或帮助吗? 感谢

3 个答案:

答案 0 :(得分:1)

使用堆栈数据结构可以完成这项工作。但是,您必须逐个字符而不是一行读取。

步骤:

  1. 只要您没有遇到"/",就不要预处理。
  2. 当您遇到'/'时,检查下一个字符是否为"*"
    • 如果是,请将所有数据推入堆栈,直到"*/"组合到来。
  3. "*/"推送到输出时。
  4. 如果"*/"未到来或"*/"没有匹配的"/*",则抛出错误。

答案 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);

ref =>
https://blog.ostermiller.org/find-comment