删除字符串中字符之间的多次出现
Remove multiple occurrences between characters in string
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));
这在单次出现的情况下工作正常。
您可以为此使用正则表达式:
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)) "
正则表达式的工作原理如下:/\*
部分简单地识别 /*
模式。接下来 .*?
匹配 non-greedy 任何字符序列,但是从它匹配模式的下一部分 \*/
的那一刻起就会被切断是 */
片段。通过使用 Replace
,我们用空字符串替换了该模式的 all 匹配项,因此我们将其删除。
使用 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;
}
}
但这相当复杂(仍有可能存在一些错误)并且效率可能较低。
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));
这在单次出现的情况下工作正常。
您可以为此使用正则表达式:
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)) "
正则表达式的工作原理如下:/\*
部分简单地识别 /*
模式。接下来 .*?
匹配 non-greedy 任何字符序列,但是从它匹配模式的下一部分 \*/
的那一刻起就会被切断是 */
片段。通过使用 Replace
,我们用空字符串替换了该模式的 all 匹配项,因此我们将其删除。
使用 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;
}
}
但这相当复杂(仍有可能存在一些错误)并且效率可能较低。