Регулярное выражение для объединения цифр - PullRequest
3 голосов
/ 26 мая 2009

У меня есть последовательность цифр, как показано ниже. Я хочу объединить цифры в группу из 4 человек. Кто-нибудь может дать для этого регулярное выражение vim?

Ввод: 1234 56 7890 1234

Вывод должен быть: 1234 5678 9012 34

Ответы [ 4 ]

10 голосов
/ 26 мая 2009

Два прохода:

s/ //g
s/\(.\{4\}\)/\1 /g
4 голосов
/ 26 мая 2009

Вы можете сделать это за один проход, но это выглядит ужасно:

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

Хотя это работает, это скорее глупо. Это одно из этих двухпроходных решений быстрее, чем потратить 2 минуты на разработку одного Monsteregex ™, который делает это за один проход. Кроме того, двухпроходные решения легче понять.

4 голосов
/ 26 мая 2009

Я бы сделал это в два этапа: (1) удалить пробелы справа от группы цифр

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

(2) группировка:

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

В случае множества строк записать макрос
или выполните эти шаги для отмеченной области.

1 голос
/ 26 мая 2009
:s/\(\d\)\s*\(\d\)\s*\(\d\)\s*\(\d\)\s*/\1\2\3\4 /g

работает, но я предпочитаю решение самодержавия .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...