2009-05-26 105 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