给出以下电话号码列表
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
仅格式化第一行。 有什么想法吗?
试试这个:
:%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
这大大增加了可读性