2014-11-24 85 views
0

我使用正則表達式來選擇兩個分號「;」之間的特定模式。在Vim中的正則表達式

,我測試上的字符串是:

; DNA catabolic process ; adf sdfc sdfwefsdf ; 

,我使用Vim的正則表達式如下選擇「DNA」的格局和分號之前剩下的兩個詞「;」因此分號後的剩餘模式「即adf sdfc ...」將不會被選中。我無法想出在「DNA」之後和分號之前選擇剩餘模式的方法。你有什麼想法解決這個問題嗎?

這裏是我想出了正則表達式:

:%s/\(\;\)\(\s\)\(\DNA\)/\3\4/cg 
+1

預期的輸出是什麼? – hwnd 2014-11-24 04:49:06

回答

4

你可以試試下面的正則表達式來打印字符串DNA加上以下兩個單詞。

:%s/; \+\(DNA \+[^;]*\) \+;.*/\1/cg 

輸出:

DNA catabolic process 
  • <space>\+匹配一個或多個空格
  • 它匹配任何字符,但不 ;零次或多次
  • [^;]*否定字符類。
+0

這是在Vim Regex中完美工作的。 – MEhsan 2014-11-24 05:15:17

0

你要找的片段可能是([^;])*;,如果你不是真正關心它是否正是兩個詞。或者(\s\+\w\+\s\+\w\+\s*);,如果你需要它只是兩個字。