在vim中正则表达式

时间:2009-07-29 08:55:29

标签: vim

如何在vim中将字符串(4000到4200)替换为(5000到5200)。

5 个答案:

答案 0 :(得分:9)

另一种可能性:

:%s/\v<4([01]\d{2}|200)>/5\1/g

这个也做200,因为它使用\v switch,所以它不会受到“倾斜牙签综合症”的影响太多。

编辑#1:添加了单词边界锚('<''>'),以防止替换"14100"等。


编辑#2:有些情况下,“字边界”不足以正确捕获所需图案。如果您希望将空格作为分隔因子,则表达式会变得更复杂。

:%s/\v(^|\s)@<=4([01]\d{2}|200)(\s|$)@=/5\1/g

其中“(^|\s)@<=”是“行首”或“\s”以及“(\s|$)@=”的后备断言是“结束 - ” of-line“或”\s“。

答案 1 :(得分:5)

:%s/\<4\([01][0-9][0-9]\)\>/5\1/g

答案 2 :(得分:1)

:%s/\<4\([0-1][0-9][0-9]\)\>/5\1/g

将执行4000到4199.您必须单独执行4200/5200。

快速解释。上面找到4,然后是0或1,然后是0-9两次。 0-1,0-9,0-9被包裹在一个组中,替换(在斜杠之后)表示替换为5后跟最后一个匹配的组(\ 1,即4之后的位)。

\&LT;和&gt;是字边界,以防止与14002匹配(thx Adrian)

%表示所有行。 / g表示该行上的每个匹配(而不仅仅是第一个)。

答案 3 :(得分:1)

如果您由于某种原因不想进行完整搜索和替换,请记住ctrl-a将增加光标下方或之后的下一个数字。因此,在命令模式下,您可以按1000 ctrl-a将下一个数字增加1000。

如果您使用的是Windows,请参阅this question中有关如何进行ctrl-a增量而不是全部选择的答案。

答案 4 :(得分:0)

更多打字,但思路不足:

:%s/\d\+/\=submatch(0) >= 4000 && submatch(0) <= 4200 ? submatch(0) + 1000 : submatch(0)/g