2017-08-09 130 views
4

我有一段文字如下。替換vim中除括號外的所有字符串

cat 
dog 
elephant 
cat (1) 
zebra(1) 
snow leopard 
shark (other) 
animal (hi) (2) 

我想將它們替換如下。

[[cat]] 
[[dog]] 
[[elephant]] 
[[cat]] (1) 
[[zebra]](1) 
[[snow leopard]] 
[[shark]] (other) 
[[animal (hi)]] (2) 

任何想法?

謝謝您的提前。

備註cat (1)zebra(1)(第4〜5行)之間的區別,空格。

回答

5

你可以用非貪婪.\{-}儘可能少的文字儘可能匹配,然後任選匹配帶括號的組,再搭配行的末尾:

:%s/\(.\{-}\)\(\?([^)]*)\)\?$/[[\1]]\2/ 
+0

你能解釋一下'\ @ ='的含義嗎? – plhn

+0

@plhn:這是一個超前的斷言。在它之前的'\($ \ |(\)'''組已被測試但不匹配 – Ryan

+0

非常感謝您的建議,但我不得不修改我的問題,它有*錯誤* – plhn

2

使用非常神奇的正則表達式我的解決辦法:

/\v(^\w+(\s\w+)?) 
:%s,,[[\1]],g 

First the search 
\v ......... stats very magic (avoiding lots of scapes) 
(.......... starts group one 
^ .......... beginning of line 
\w+ ........ at least one word 
(.......... starts group two inside group one (it will become optional at the end 
\s ........ space 
\w+ ........ another word 
) ........... closes groupo two 
? ........... makes group two optional inside groupo one 
) ........... closes group one 
+0

酷(15個字符) – plhn

相關問題