0

鉴于以下电话号码列表

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

编写一个正则表达式(在 loki 上使用 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 

仅格式化第一行。有任何想法吗?

4

2 回答 2

1

首先使用 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

这大大提高了可读性

于 2017-02-22T07:26:01.967 回答
1

尝试这个:

:%s,.*\(\d\d\d\).*\(\d\d\d\).*\(\d\d\d\d\).*,\1 \2 \3,
于 2017-02-22T07:25:16.740 回答