删除字符串中字符之间的多次出现

时间:2017-04-12 09:29:02

标签: c# .net

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

单次出现时效果很好。

1 个答案:

答案 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

但这非常复杂(有一些机会仍有一些错误)并且可能效率较低。