Как мне отформатировать список телефонных номеров, используя регулярные выражения в командах vim?
Учитывая следующий список телефонных номеров
8144658695
812 673 5748
812 453 6783
812-348-7584
(617) 536 6584
834-674-8595
Напишите одно регулярное выражение (используйте vim на loki), чтобы переформатировать числа, чтобы они выглядели так
814 465 8695
812 673 5748
812 453 6783
812 348 7584
617 536 6584
834 674 8595
Я использую команду поиска и замены. Мое регулярное выражение, использующее обратные ссылки:
:%s/\(\d\d\d\)\(\d\d\d\)\(\d\d\d\d\)/\1 \2 \3\g
форматирует только первую строку. Есть идеи?
2 ответа
Попробуй это:
:%s,.*\(\d\d\d\).*\(\d\d\d\).*\(\d\d\d\d\).*,\1 \2 \3,
Сначала используйте count для совпадения с шаблоном несколько раз, это плохая привычка повторять шаблон:
\d\{3} "instead of \d\d\d
Чем вы также должны соответствовать пробельные символы и т.д.:
:%s/.*\(\d\{3}\).*\(\d\{3}\).*\(\d\{4}\).*/\1 \2 \3/g
Или, что еще лучше, избегайте всего регулярного выражения с \v
:
:%s/\v.*(\d{3}).*(\d{3}).*(\d{4}).*/\1 \2 \3/g
Это значительно повышает читаемость