Vim正则表达式匹配空格,数字和其他所有内容,直到;

时间:2014-01-23 11:04:45

标签: regex 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*; 我需要一些东西来匹配一个空格,一个数字而不是一切,直到第一个“;”。

2 个答案:

答案 0 :(得分: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")/

答案 1 :(得分:1)

如果您使用“非贪婪”匹配,您可能会使原始模式有效,例如\p\{-}表示“任意数量的可打印字符,但尽可能少”,或明确排除' ;”带有[^;]*的字符(任何不是';'的字符的任意数字)。

:help non-greedy
:help /[(然后在E769主题下方向下滚动)