2011-04-28 161 views
10

我想刪除所有符合此正則表達式的方括號:\[.*\].*{,但我只想刪除括號,而不是後面的內容 - 即,我想刪除括號以及它們內部的內容,只有當他們跟着一個開放的大括號。在Vim中搜索/替換

我該如何做到這一點與Vim的搜索/替換?

回答

13

您可以使用\zs\ze來設置開始和比賽結束。

:%s/\zs\[.*\]\ze.*{//g應該工作。

您正在告訴Vim用空字符串替換\zs\ze之間的內容。

(請注意,你需要在你的Vim二進制編譯+語法選項)

欲瞭解更多信息,請參閱:help /\zs:help pattern

編輯:其實\ ZS是沒有必要在這種情況下,但我將其留作教育用途。 :)

+0

我不知道這個存在!優秀的提示! – 2011-04-28 15:33:30

0

這將運行在當前文件的正則表達式:

:%s/\[.*\]\(.*{\)/\1/g

+0

這正是我的問題,我想保持大括號,只有刪除方括號裏面有什麼他們。 – 2011-04-28 14:47:23

+0

哦,我不確定你是否需要在vim中使用正則表達式的語法。我用另一個可能的解決方案編輯了我的答案,儘管現在已經發布了幾個工作答案。 – 2011-04-28 14:53:08

2

如何:

:%s#\[.*\]\ze.*{##g 

注意,\ze項目標誌着比賽結束,所以任何如下不會被替換。

3

如果您環繞你的正則表達式的最後一位在括號中你可以再次使用您的更換:

:%s/\[.*\]\(.*{\)/\1/g 

的\ 1引用括號中的正則表達式的一部分。

我喜歡我之前在搜索中使用它來建立我的搜索字符串和替換,以確保它是正確的之前,我更改文檔:

/\[.*\]\(.*{\) 

這將突出你會更換什麼都occurrances 。
然後沒有一個搜索詞運行%s命令來讓它重新使用過去的搜索詞

:%s//\1/g