我有一條如下所示的行。雙引號括起來的字符串
fullname =(這是一個測試名稱);
我想雙引號「(」和「)」中的所有字符串。
即fullname =(「this」「is」「a」「test」「name」);
有人可以給我一個vim正則表達式來做到這一點嗎?
我有一條如下所示的行。雙引號括起來的字符串
fullname =(這是一個測試名稱);
我想雙引號「(」和「)」中的所有字符串。
即fullname =(「this」「is」「a」「test」「name」);
有人可以給我一個vim正則表達式來做到這一點嗎?
該做的:
:%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不對實際上支持可變長度向後看。大多數現代正則表達式實現不。
該命令使一切這是不空格,製表符,等號,括號或分號報價:
:s/[^ \t=();][^ \t=();]*/"&"/g
請注意,此報價fullname
爲好,但你可以手動刪除這些報價。
有時候手工完成部分工作是值得的,因爲自動化會更慢。
運行命令:
:help substi
,以獲取有關vim的正則表達式替換的幫助。
我會做如下:
:s/\<\w\+\>/"&"/gc
由於確認開關「C」,你會被要求每次更換。 回答'n'(no)代替行的其餘部分的'全名'和'a'(全部)。
@pts,我想不想任何手動刪除 – chappar 2009-05-02 07:55:26
不工作。這將所有內容都包含在引號中。 – Tomalak 2009-05-02 07:58:47
我認爲它的工作原理與答案相同,我在提交答案之前已經嘗試過。 「一切」是什麼意思? – pts 2009-05-02 08:26:54