我的任务是找到电话号码,但我不想找到有区号的电话号码。我正在使用grep
到目前为止,我已经发现我可以使用了
[0-9]{3,3}\-[0-9]{4,4}
找到当地的电话号码,但我不确定如何否定非本地电话号码。
前:
答案 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