使用正则表达式

时间:2016-08-02 15:12:25

标签: regex bash perl

我有一个包含以下任何数字格式的文件

12.456.7890
12-456-7890    
123.456.7890
(123)456.7890
(123).456.7890
123-456-7890
(123)-456-7890
(123)456-7890

是否可以使用正则表达式替换,以便最终输出数字始终采用格式(123)456-7890或(12)456-7890

2 个答案:

答案 0 :(得分:2)

是的,它是:

s/\(?(\d\d\d)\)?[-.]?(\d\d\d)[-.]?(\d\d\d\d)/($1)$2-$3/g

我应该提到以上内容也将解析以下两个:

123)456.7890
(123456.7890

答案 1 :(得分:2)

您可以使用两个替换来执行此操作:

itextsharp

第一个删除所有非数字字符。第二个在每个组之间插入所需的字符。

你应该考虑到这种方法会弄乱任何与你的示例输入中的行不同的行。保护自己的一种方法可能是这样的:

perl -lpe 's/\D//g; s/(\d{3})(\d{3})(\d{4})/($1)$2-$3/' file

即。在继续之前,确保该行上的匹配数为10。