2017-02-22 40 views
0

Учитывая следующий список телефонных номеровКак форматировать список телефонных номеров с помощью регулярного выражения в командах vim?

8144658695 
812 673 5748 
812 453 6783 
812-348-7584 
(617) 536 6584 
834-674-8595 

Написать регулярное выражение, (использовать Vim на Локи) переформатировать числа так, что они выглядят как этот

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 

только форматирует первую строку. Любые идеи?

ответ

1

Попробуйте это:

:%s,.*\(\d\d\d\).*\(\d\d\d\).*\(\d\d\d\d\).*,\1 \2 \3, 
1

Первый счет использования в соответствии шаблон несколько раз, это плохо Habbit повторить шаблон:

\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 

Это значительно повышает читаемость

+0

Я попробовал это первоначально и это не сработало. Забыл, мне тоже пришлось скрывать '{' и '}'! Проклятые диалоги. – ffledgling

+0

ха, почему нисходящий? и да, это немного громоздко, но вы можете использовать трюк \ v, чтобы не убежать, см. мой обновленный ответ. @ffledgling. –

+0

. Я не тот, кто ниспровергнут, извините, если мой комментарий встречается как критика, я на самом деле имел в виду это как-то, что я должен был сделать, но не сделал этого. Продвижение для трюка '\ v', о котором я не знал. – ffledgling

 Смежные вопросы

  • Нет связанных вопросов^_^