删除“/*”和“*/”之间的文本(阻止注释)

本文关键字:注释 之间 删除 文本 | 更新日期: 2023-09-27 18:34:15

我正在尝试删除从文本文件中读取的块注释。因此,应删除"/"和"/"之间的所有文本。读者一行一行地阅读,以及问题所在。这是我到目前为止所拥有的:

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

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

删除“/*”和“*/”之间的文本(阻止注释)

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

步骤:

  1. 只要不遇到"/"就不要预处理。
  2. 当您遇到"/"时,请检查下一个字符是否为"*"
    • 如果是,请将所有数据推送到堆栈中,直到出现"*/"组合。
  3. "*/"来临时,推送到输出。

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

使用正则表达式怎么样

?''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, "");
}

试试这个项目:

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

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