我对自己在做什么有些怀疑。我尝试删除文本的字符,如字母“n”,它位于“(”和“”或“反之”,以及许多其他情况之间。我使用正则表达式来查找模式,但我怎样才能删除字母?
我用过这个:"[( ]" + mystring + @"[)= \-\*]"
foreach(Match mm in Regex.Matches(SourceCode, @"[( ]" + mystring + @"[)= \-\*]"))
{
int lng= mm.Length;
SourceCode = SourceCode.Remove(mm.Index + 1, lng- 2);
}
问题在于它计算原始文本的索引,如果将删除“n”,则下一个匹配的索引将用一个decalated并将从错误的位置删除。真奇怪。
有人知道它在做什么吗?
或许你有更好的想法?
修改
我无法使用替换。假设我要删除“n”,其中n就像是“(n”,所以如果我使用替换它将删除我不想要的所有这三个字符。如果我只使用替换n,它将删除错误的字母,如“ n“from”和“......
答案 0 :(得分:4)
您的问题有点难以阅读,但我认为您需要的是替换操作以及lookaround assertions:
SourceCode = Regex.Replace(SourceCode, "(?<=[( ])" + mystring + "(?=[)= *-])", "");
这将取代正则表达式mystring
,但前提是(
或空格,后跟)
,=
,{{1 },*
或空格。
如果您希望将-
解释为字符串而不是正则表达式,则应使用mystring
代替Regex.Escape(mystring)
。