2011-11-16 68 views
0

我对我在做什么有一些怀疑。我尝试删除字母“n”之间的一个“(”和一个“”或者反之,以及许多其他情况之间的字母)。我使用正则表达式来查找模式,但是如何才能删除该字母?正则表达式和删除不正常工作

我用这个:"[(]" + mystring + @"[)= \-\*]"

这样的:

foreach(Match mm in Regex.Matches(SourceCode, @"[(]" + mystring + @"[)= \-\*]")) 
{ 
    int lng= mm.Length; 
    SourceCode = SourceCode.Remove(mm.Index + 1, lng- 2); 
} 

的问题是,它计算的原始文本索引,如果有将被删除一个“N”的指数因为下一场比赛将会有一场比赛并将从一个错误的地方删除。真的很奇怪。

有人知道它在做什么吗?

或者你是否有更好的ideea?

编辑:

我不能使用替代。假设我想删除“n”,其中n就像“(n”,所以如果我使用替换它将删除所有这三个字符,我不想要。如果我只用替换n,它会删除错误的字母,如“ 。N”从‘和’

+0

如何在每次gogin改变内容时将索引存储在var中? –

+0

什么是decalated? –

+0

@Tim Pietzcker的解决方案将关注(和空间 –

回答

4

你的问题是有点难以阅读,但我认为你需要的是与lookaround assertions替换操作,一起:

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

这将替换正则表达式mystring没有任何内容,但前提是前面有(或空格,然后是),=,*,-或空格

如果要将mystring解释为字符串,而不是正则表达式,则应该使用Regex.Escape(mystring)而不是mystring

+0

+1这将是我的答案 –

+0

啊,这就是我一直在寻找的东西,非常感谢你,并且对我的英语不好! – Gigg