查找非本地电话号码

时间:2015-10-19 17:36:16

标签: regex grep

我的任务是找到电话号码,但我不想找到有区号的电话号码。我正在使用grep

到目前为止,我已经发现我可以使用了 [0-9]{3,3}\-[0-9]{4,4}找到当地的电话号码,但我不确定如何否定非本地电话号码。

前:

  • 555-5555是当地的电话号码
  • 555-555-5555是非本地语音。

2 个答案:

答案 0 :(得分:2)

您的正则表达式没问题,但您可以利用锚点仅匹配本地数字:

^[0-9]{3}\-[0-9]{4}$
^------ Here ------^

<强> Working demo

但是如果你的线只保留你的数字,那么上面的正则表达式会起作用,所以如果你在同一行中有多个数字,你可以使用像这样的负面观察:

(?<!-)[0-9]{3}\-[0-9]{4}

<强> Working demo

顺便说一句,正如 ghoti 在评论中所述,除非在字符类中使用,否则不需要转义连字符,因此您可以将正则表达式缩短为:

^[0-9]{3}-[0-9]{4}$

答案 1 :(得分:0)

grep -v否定匹配,因此如果您搜索

grep -v '[0-9]{3}-[0-9]{3}-[0-9]{4}'

然后您的所有10位数字都不匹配,只留下7位数字。

但是,只有当您拥有格式良好的电话号码(例如来自生成的脚本)时才会这样。您必须考虑这些和其他变体:

(800) 555-5555
800-555-5555
800 555 5555
8005555555