2009-05-26 102 views
3

我有一个如下所示的数字序列。我想结合数字4组。有人可以给一个VIM正则表达式来做到这一点?合并数字的正则表达式

输入:1234 56 7890 1234

输出应为:1234 5678 9012 34

回答

10

两次通过:

s/ //g 
s/\(.\{4\}\)/\1 /g 
+0

我只是想知道,如果有一个正则表达式可以在一个通道中执行 – chappar 2009-05-26 11:16:16

4

我将在两个步骤中执行此操作: (1)除去数字组的空白右侧

:s/\(\d\+\) /\1/g 

(2)分组:

:s/\(\d\{4}\)/\1 /g 

在很多情况下,行录制宏
或做这些步骤为标记的区域。

4

可以做一个合格的,但它看起来可怕:

:s/\(\d\) *\(\d\) *\(\d\) *\(\d\) */\1\2\3\4 /g 

虽然这个工作,它是相当愚蠢的。做这两种优秀的双通道解决方案其中之一要快得多,而不是花费2分钟来完成一个Monsteregex™,一次就能完成。此外,双通解决方案更易于理解。

1
:s/\(\d\)\s*\(\d\)\s*\(\d\)\s*\(\d\)\s*/\1\2\3\4 /g 

作品,但我更喜欢Autocracy's solution