2014-01-23 47 views
1

我試圖讓這個正則表達式,但它讓我瘋狂。我有串這樣的:Vim正則表達式匹配一個空格,一個數字和其他所有內容直到;

foobar 34;lorem ipsum; 
foo 34/ABC;dolerm sit; 
bar 3445b;amet; 

我需要改變他們是這樣的:

foobar;34;lorem ipsum; 
foo;34/ABC;dolerm sit; 
bar;3445b;amet; 

正則表達式我拿出來是這一個,但它僅匹配數字:\s\d*;這一個匹配整行\s\d*\p*; 我需要的東西只匹配一個空格,一個數字和一切,直到第一個「;」。

回答

3

這個工作適合你嗎?

%s/ \ze\d/;/g 

,如果你想改變

foo bar 3 r e p l a c e;bar; 

foo bar;3;r;e;p;l;a;c;e;bar; 

%s/ \d[^;]*/\=substitute(submatch(0)," ",";","g")/ 
+0

是的,這似乎是正確。非常感謝你! – Federico

1

你也許可以讓你原來的模式工作,如果你使用的「非貪婪」的比賽,例如\p\{-}爲「任何數量的可打印字符,但儘可能少」,或明確排除';'與[^;]*(任何不是';'的任何字符的任何數字)的字符。

:help non-greedy
:help /[(然後向下滾動E769主題下文)

相關問題