2015-03-13 319 views
1

如果我有一個string這樣的:正則表達式替換

MyObject[0] 

我想用一個RegEx前`[

插入()所以,我最終會:

MyObject()[0] 

我用String.Replace但是如果已經有()這可能會導致問題。

.Replace("[", "()[") 

例子:

MyObject()[0].Items[0] 

竟又

MyObject()()[0].Items()[0] 

想要使用正則表達式來做到這一點,以避免重複。

Regex.Replace(s, @"[A-Za-z]\[", "()["); 

的這裏的問題是它取代了前面的字符:

MyObjec()[0] 

建議?

回答

1

只要看看字符後面跟着[並且只能在這種情況下替換(如果是這樣的話) d字符後跟(。

例如:

Regex.Replace(
    input, 
    //find expression 
    @"(\w+)(\[)", 
    //replacement expression 
    @"$1()$2") 
1

使用圍繞A-Z塊分組在您更換帶回你t:從LinqPad

Regex.Replace(s, @"([A-Za-z])\[", "$1()["); 

測試:

Regex.Replace("MyObject[0]", @"([A-Za-z])\[", "$1()[") 

輸出:

MyObject()[0] 
+0

這將產生爲MyObject()如果輸入的字符串爲MyObject()[]() – 2015-03-13 19:45:32

+0

沒有它沒有。 '()'不在'A-Za-z'中。 – DLeh 2015-03-13 19:46:09

+0

啊是的。誤讀它。它雖然失敗了另一種情況。 MyObject []。Items [] – 2015-03-13 19:48:37