2011-11-16 65 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