2

我正在尝试删除从文本文件中读取的块注释。所以'/ '和' /'之间的所有文本都应该被删除。读者逐行阅读问题所在。这就是我到目前为止所拥有的:

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

有什么建议或帮助吗?谢谢

4

3 回答 3

1

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

脚步:

  1. 只要您没有遇到"/".
  2. 当您遇到“/”时,请检查下一个字符是否为"*".
    • 如果是,则将所有数据推入堆栈,直到"*/"组合出现。
  3. 当一个"*/"来推到输出。

如果 a"*/"没有出现或者 a"*/"没有匹配的"/*",则抛出错误。

于 2012-05-16T11:54:37.650 回答
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, "");
}
于 2012-05-17T08:50:15.957 回答
0

试试这个项目:

var Test = Regex.Replace(MyString, @"/\*([^*]|[\r\n]|(\*([^/]|[\r\n])))*\*/", "", RegexOptions.Singleline);

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

于 2018-03-24T01:35:08.653 回答