string Test = "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)*/";
我想删除介于
之间的任何内容"/*" and "*/"
对于单次出现,我有一个代码:
int startIndex = item.IndexOf("/*");
int endIndex = item.LastIndexOf("*/");
string Output = item.Replace(item.Substring(startIndex, endIndex -
startIndex + 2), string.Empty));
单次出现时效果很好。
答案 0 :(得分:3)
您可以使用正则表达式:
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)) "
正则表达式的工作方式如下:/\*
部分只识别/*
模式。接下来,.*?
匹配非贪婪任何字符序列,但会从匹配模式的下一部分的那一刻起切断,\*/
即{ {1}}片段。通过使用*/
,我们将该模式的所有匹配替换为空字符串,因此我们将其删除。
使用Replace
的解决方案可能是:
IndexOf
但这非常复杂(有一些机会仍有一些错误)并且可能效率较低。