如何在 vim 命令中使用正则表达式格式化电话号码列表?

问题描述 投票:0回答:2

给出以下电话号码列表

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 

仅格式化第一行。 有什么想法吗?

regex vim command-prompt backreference
2个回答
1
投票

试试这个:

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

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

这大大增加了可读性

© www.soinside.com 2019 - 2024. All rights reserved.