删除“/*”和“*/”之间的文本(阻止注释)
本文关键字:注释 之间 删除 文本 | 更新日期: 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);
}
有什么建议或帮助吗?谢谢
使用堆栈数据结构将完成这项工作。 但是,您必须逐个字符而不是一行地阅读。
步骤:
- 只要不遇到
"/"
就不要预处理。 - 当您遇到"/"时,请检查下一个字符是否为
"*"
。- 如果是,请将所有数据推送到堆栈中,直到出现
"*/"
组合。
- 如果是,请将所有数据推送到堆栈中,直到出现
- 当
"*/"
来临时,推送到输出。
如果"*/"
没有出现,或者"*/"
没有匹配的"/*"
,则抛出错误。
使用正则表达式怎么样
?''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