2009-05-26 4 views

ответ

10

два прохода:

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

Мне было просто интересно, если существует регулярное выражение, которое может сделать за один проход – chappar

+0

Я не думаю, что есть способ сделать это за один проход с регулярным выражением. Я не могу придумать, как удалить пробелы в одном проходе, как группировка в 4s. –

+0

@Autocracy - Ты можешь сделать это за один проход, но это ужасно. I + 1'ed, потому что это лучшее решение, на мой взгляд, но для однопроходного решения, см. Мой ответ: http://stackoverflow.com/questions/910133/regex-for-combining-digits/910222#910222 –

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 ™, который делает это за один проход. Кроме того, двухпроходные решения легче понять.