我正试图制作这个正则表达式,但它让我疯了。我有这样的字符串:
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*;
我需要一些东西来匹配一个空格,一个数字而不是一切,直到第一个“;”。
答案 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主题下方向下滚动)