您可以使用一个正则表达式:
Regex rgx = new Regex(@"/\*.*?\*/");
string output = rgx.Replace(item,"");
当csharp
交互式控制台运行此,我们得到:
csharp> using System.Text.RegularExpressions;
csharp> string item = "SET @rhsLclGrpVar = CAST(@variable1 AS CHAR(3)) /*RHS: X(03)*/+ CAST(@variable2 AS CHAR(42)) /*RHS: X(42)*/+ CAST(@variable3 AS CHAR(8)) /*RHS: X(08)*/";
csharp> Regex rgx = new Regex(@"/\*.*?\*/");
csharp> rgx.Replace(item,"");
"SET @rhsLclGrpVar = CAST(@variable1 AS CHAR(3)) + CAST(@variable2 AS CHAR(42)) + CAST(@variable3 AS CHAR(8)) "
正则表达式的工作原理如下:/\*
部分简单地识别/*
模式。接下来.*?
匹配非贪婪任何字符序列,但会从匹配模式的下一部分即*/
片段的那一刻开始截断。通过使用Replace
我们将替换为所有与空字符串匹配的模式,因此我们将其删除。
使用IndexOf
一个解决办法是:
string result = item;
while(true) {
idx = result.indexof("/*");
if(idx >= 0) {
idx2 = result.indexof("*/",idx);
if(idx2 >= 0) {
result = result.Substring(0,idx)+result.Substring(idx2+2);
}
} else {
break;
}
}
但是,这是相当复杂(有仍然有一些bug一定的几率),将可能是低效率的。
还有其他选择..但是,为了简单起见,怎么样..一个while循环,并且它发现索引/ *继续? – BugFinder
正如BugFinder所建议的那样:'int startIndex; while((startIndex = item.IndexOf(“/ *”)!= -1)' – xanatos
感谢您的建议,但我一直在寻找比while循环更清洁的东西,原因是这个代码被嵌入在for循环中读取文件。它可能会变得混乱 –