正则表达式并删除无法正常工作

时间:2011-11-16 22:33:44

标签: c# regex pattern-matching matching

我对自己在做什么有些怀疑。我尝试删除文本的字符,如字母“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”和“......

1 个答案:

答案 0 :(得分:4)

您的问题有点难以阅读,但我认为您需要的是替换操作以及lookaround assertions

SourceCode = Regex.Replace(SourceCode, "(?<=[( ])" + mystring + "(?=[)= *-])", "");

这将取代正则表达式mystring,但前提是(或空格,后跟)=,{{1 },*或空格。

如果您希望将-解释为字符串而不是正则表达式,则应使用mystring代替Regex.Escape(mystring)