leetcode-193 Valid Phone Numbers

本文详细介绍了如何使用条件分支和正则表达式来匹配特定格式的电话号码,并解释了egrep与perl(-P)正则表达式在处理相同任务时的差异与原因。

两种格式的电话号码,可以使用条件分支:或者(|)。还有一点要注意的就是必须在每个正则表达式的首尾加^和$,不然这样的行也会被选出来的

0(001) 345-0000

(001) 345-0000111

正确的答案:

egrep '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$|^[0-9]{3}-[0-9]{3}-[0-9]{4}$' file.txt

更好的答案:

grep -P '^(\d{3}-|\(\d{3}\) )\d{3}-\d{4}$' file.txt 

为什么用egrep '^(\d{3}-|\(\d{3}\) )\d{3}-\d{4}$' file.txt就不能AC了?

但是egrep '^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$' file.txt 就可以AC

原因可能是egrep(扩展的正则表达式也不支持\d,只支持[0-9]),但是perl(-P)正则表达式就支持\d


参考:

Using grep:

grep -P'^(\d{3}-|\(\d{3}\) )\d{3}-\d{4}$'file.txt

Using sed:

sed -n -e '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/p' file.txt

Using awk:

awk '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/' file.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值