2009-05-02 182 views
2

我有一條如下所示的行。雙引號括起來的字符串

fullname =(這是一個測試名稱);

我想雙引號「(」和「)」中的所有字符串。

即fullname =(「this」「is」「a」「test」「name」);

有人可以給我一個vim正則表達式來做到這一點嗎?

回答

3

該做的:

:%s/\v(\(.*)@<=[[:alnum:]]+(.*\))@=/"&"/g 

注意,如果輸入的格式不正確使用正則表達式匹配嵌套的模式(如括號)會出問題。上述內容根本不處理嵌套圓括號,括號中的引號或轉義符也會將其打破。小心輕放。

其內容如下:

 
:%s    substitute on all lines 
/    matching 
\v    (with "very magic" switched on) 
(\(.*)@<=   a position that follows an opening paren, on this line 
[[:alnum:]]+  a series of alphanumeric characters (i.e. "words") 
(.*\))@=   that are followed by a closing paren, on this line 
/    replace with 
"&"    the match, in quotes 
/g    globally 

這是一個值得注意的事實是,VIM不對實際上支持可變長度向後看。大多數現代正則表達式實現不。

0

該命令使一切這是不空格,製表符,等號,括號或分號報價:

:s/[^ \t=();][^ \t=();]*/"&"/g 

請注意,此報價fullname爲好,但你可以手動刪除這些報價。

有時候手工完成部分工作是值得的,因爲自動化會更慢。

運行命令:

:help substi 

,以獲取有關vim的正則表達式替換的幫助。

+0

@pts,我想不想任何手動刪除 – chappar 2009-05-02 07:55:26

+0

不工作。這將所有內容都包含在引號中。 – Tomalak 2009-05-02 07:58:47

+0

我認爲它的工作原理與答案相同,我在提交答案之前已經嘗試過。 「一切」是什麼意思? – pts 2009-05-02 08:26:54

4

我會做如下:

:s/\<\w\+\>/"&"/gc 

由於確認開關「C」,你會被要求每次更換。 回答'n'(no)代替行的其餘部分的'全名'和'a'(全部)。

相關問題